آموزش اشتراک گذاری برنامه اندروید در برنامه نویسی اندروید
سلام دوستا در این سری از آموزش های برنامه نویسی اندروید به آموزش اشتراک گذاری برنامه اندروید در برنامه نویسی اندرویدمی پردازیم در اصل به اشتراک گذاری خود اپلیکیشن شما از طریق برنامه خودتان . یک مقدار رساندن این مفهموم سخت است ? و چرا باید این کار را کرد شاید شخصی برنامه شما را نصب کرد و فایل نصبی شما را نداشت و بخواهد برای کسی دیگر ارسال کند کافی است وارد برنامه شود و روی دکمه کلیک کند تا برنامه را به اشتراک بگذارد در ادامه با ما همراه باشید.
ما یک void برای این کار درست کردیم که فقط کافی است این Void را شما اجرا کنید کد زیر را باید در اکتیویتی که می خواهید برنامه به اشتراک گذاشته شود قرار دهید پس همانند زیر پیش می رویم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package ir.programchi; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import ir.programchi.R; public class About extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); Button btn = (Button)findViewById(R.id.share); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { shareApplication(); } }); } private void shareApplication() { ApplicationInfo app = getApplicationContext().getApplicationInfo(); String filePath = app.sourceDir; Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("*/*"); File originalApk = new File(filePath); try { File tempFile = new File(getExternalCacheDir() + "/ExtractedApk"); //If directory doesn't exists create new if (!tempFile.isDirectory()) if (!tempFile.mkdirs()) return; tempFile = new File(tempFile.getPath() + "/" + getString(app.labelRes).replace(" ","").toLowerCase() + ".apk"); if (!tempFile.exists()) { if (!tempFile.createNewFile()) { return; } } InputStream in = new FileInputStream(originalApk); OutputStream out = new FileOutputStream(tempFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); System.out.println("File copied."); // باز کردن پنجره اشتراک گذاری intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFile)); startActivity(Intent.createChooser(intent, "اشتراک گذاری با")); } catch (IOException e) { e.printStackTrace(); } } } |
در بالا void ما یعنی shareApplication یکسری کارها انجام می دهد که ادامه آنها را توضیح خواهیم داد.
ApplicationInfo : اطلاعاتی مثل نام پکیج را می گیرد.
سپس ما باید مسیر اصلی که اپلیکیشن در آن قرار دارد را به دست آوریم سپس با استفاده از app.sourceDir که app یک instance از ApplicationInfo می باشد مسیر اصلی اپلیکیشن را در متغییر filePath قرار می گیرد حالا با استفاده از intent می آیم Action اشتراک را ایجاد می کنیم (همان صفحه ای که برای اشراک گذاری نمایش داده می شود.) و setType را برابر با /*/ قرار داده ایم تا بتوانید فایل را هم از طریق بلوتوث نیز ارسال شود اگر */.apk قرار دهیم نمی توانیم فایل را به intent بلوتوث ارسال کنیم. حالا باید از اون مسیری که اپلیکیشن ما وجود دارد (در جایی به نام root قرار دارد به صورت معمول نمی توانید آن را بردارید ولی با برنامه نویسی امکان پذیر است و اگر گوشی شما روت باشد می توانید به آن دسترسی پیدا کنید.) یک temp درست کنیم و اپ را در آنجا قرار دهیم تا بتوانیم آن را ارسال کنیم.یکسری بررسی ها هم انجام می شود به طور مثال اگر فولدر temp ایجاد نشد دوباره آن را ایجاد کن و… سپس با استفاده از InputStream فایل apk در مسیر temp قرار می دهیم.
این آموزش هم به پایان رسید.
موفق باشید.
سلام و درود بر شما. بخاطر سایت تمیزتون .و بخاطر همین قسمت که دارم تایپ میکنم قسمت ارسال نظر که هم فنتش قشنگه و هم سبز که هست خیلی قشنگه (از چه فنتی استفاده کردین ?میخوامش)ببخشید من این کد رو امتحان کردم و جواب هم داد ممنونم.ولی یه سوال دارم میخواستم ببینم میشه همین دکمه رو در اکشن بار قرار بدم , چون معمولا در اکشن بار قرار میدن.ممنون میشم کمکم کنید.
سلام از فونت پولی iransnas استفاده شده بله میشه در actionbar هم قرار داد.
خب چه طور بذارمش تو اکشن بار که ارور نده.دکمه رو میتونم تو اکشن بار بذارم از طریق فایل main.xml که در فایل menu قرار داره ولی اون بخش از کدی که خارج از on create هست رو کجا بذارم? چه طور ?
باید مثل زیر عمل کنید.
موفق باشید.
آقای جعفر پور نمخواین به من کمک کنین ? نظر قبلی رو میگم
به خاطر دیر پاسخ دادن ببخشید پیام شما را تازه دیدم
خواهش میکنم .
یه سوال خیلی از سایت ها منو کشویی رو به اشتباه کد نوشتن . اینجوریه که وقتی از چپ به راست صفحه رو میکشی کل صفحه مو جود کنار میره و منو کشویی از زیرش نمایان میشه. در صورتی که مثل تلگرام باید یه کشویی از سمت چپ بیاد روی صفحه اصلی.
آقای ادمین میشه خواهش کنم در مورد منو کشویی هم یه مطلب بذارین ?
سلام و درود به زودی قرار می گیرد و در زیر همین پست لینک را برای شما قرار می دهیم. البته می توانید از این آموزش هم استفاده کنید خیلی شبیه به آن چیزی است که شما می خواهید.
http://programchi.ir/2017/07/18/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b3%d8%a7%d8%ae%d8%aa-navigation-drawer-%d9%85%d8%aa%d8%b1%db%8c%d8%a7%d9%84-%d8%af%db%8c%d8%b2%d8%a7%db%8c%d9%86-%d8%af%d8%b1-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87/
موفق و پیروز باشید.
سلام ممنون من منتظر این آموزشتون می مونم.
ببخشید ایقد سوال می پرسم آخه من تقریبا تازه شروع کردم.اموزش این لینک بالایی برا اندروید استودیو هست?چون من از اکلیپس استفاده میکنم و قسمت build.gradl رو نداره…
سلام کد نویسی در اندروید استودیو و eclipse زیاد فرق نمی کند فقط فایل Build.gradle در eclipse وجود ندارد به زودی آموزشی قرار می دهیم تا build.gradle را به eclipse اضافه کنید
موفق و موید باشید.
سلام من کد رو وارد کردم هیچ اروری هم نداد ولی اجرا نمیشه
اخطارشم اینه Unable to create external cache directory
سلام بررسی کنید دسترسی های لازم را قرار داده باشید و همینطور ممکن است لازم باشد تا از RunTime Permission استفاده کنید .
در صورتی که با RunTime Permission آشنا نیستید همین واژه را درسایت جستجو کنید.
موفق باشد.
عالی بود
یا حق
خواهش می کنم موفق باشید.
با سلام
ببخشید این کد گذاشتید چرا تو api 26 (اندروید 8.0 ) ارور داره
لطفا کمک کنید.
ممنون
سلام باید RunTime permission را به اپتون اضافه کنید آموزش زیر را دنبال کنید.
https://programchi.ir/2017/07/08/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-runtime-permission-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/
موفق باشید.
سلام
من خودم یک ماه هست که دنبال اصلاح این کد هست و نتونستم به جواب برسم.
فقط متوجه شدم باید از bluetooth content provider استفاده کرد، که به مانیفست برنامه باید یکی دو خط اضافه بشه.
این مشکل از اندروید api 24 به بعد وجود داره، که فایل رو به صورت مستقیم ارسال نمیکنه.
سلام.آقایجعفری پور فایل apk رو دقیقا باید کجا قرار بدم؟
سلام و درود
نیازی نیست از اپ شما backup به صورت اتوماتیک تهیه می شود !
موفق باشید.
سلام ،
از این کد در برنامه استفاده کردم و ظاهرا مشکلی نداره ولی موقعی که مثلا از طریق بلوتوث برنامه رو برای دیگران ارسال میکنم اولا که حجم فایل برنامه ارسالی کمتر از مقدار واقعیشه (5.5 مگه ولی 3.5 میشه !) ثانیا برنامه هنگام نصب ناموفق انجام میشه و عملا بی استفاده میشه . لطفا راهنمایی کنید چون شدیدا بهش نیاز دارم .
ممنون ..
سلام و درود
شما باید apk sigend شده را تست کنید نه apk که ران گرفتید رو ! فایل apk که با استفاده از اندروید استودیو نصب می شود 8 تیکه است شما باید یک فایل apk امضا شده درست کنید سپس تست کنید !
موفق باشید.
پس خوشبختانه مشکل خاصی نیست و رفع میشه .
بسیار سپاسگزارم از پاسخ مفید و سریع شما ..
خواهش می کنم موفق باشید.
سلام.اگر خواسته باشیم یک عکس از داخل ایمیج ویو را ارسال کنیم چکار باید کنیم.
سلام و درود کمی متفاوت است از کد زیر استفاده کنید.
موفق باشید.
ممنونم از پاسخ سریعتون.
سلام
حالتون خوبه
ممنون از آموزش کاربردیتون
فقط من این کد رو داخل ایمولیتور اجرا کردم مشکلی نداشت اما وقتی روی گوشی تست کردم خطا داد و برنامه بسته شد(حتی در حالت دیباگ هم هیچ توضیحی برای خطا مشاهده نشد)
سلام و درود
باید دسترسی های لازم رو با استفاده از runtime permission در گوشی های بالای اندروید 5 از کاربر بگیرید.
دسترسی استفاده از storatge
موفق باشید.
سلام مجدد
بنده runtime permission رو اجرا کردم ولی به جواب نرسیدم در بین دسترسی ها فقط دسترسی به حافظه خارجی بود
در جایی خوندم باید از پرووایدر ها استفاده کنم ولی باز هم جواب نگرفتم
سلام و درود در نسخه های جدید باید از provider (در واقع Content Provider) استفاده کنید که آموزشش در سایت هست.
موفق و پیروز باشید.
عالی مثه همیشه
مرسی
ببخشید من با گوشی یک برنامه نوشتم به زبان c. حالا من چطور این سورس کد رو به apk تبدیل کنم؟
خیلی ضروریه، لطفا جواب بدین!
با سلام من کد بالا رو نوشتم ولی در اندروید8 این خطا رو میده.لطفا راهنماییم کنین.
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.example.majles/cache/ExtractedApk/%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A81400.apk exposed beyond app through ClipData.Item.getUri()