اینکار باعث افزایش حجم برنامه میشه
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
قابلیت ارسال نرم افزار در درون نرم افزار
مدیریت گفتگو
آخرین تغییر: 10 سال پیش
بیشتر برنامه های اندروید که قابلیت ارسال در خود برنامه شون رو دارند
هر کی میدونه راهشو بگه ما هم بدونیم
پاسخها 6
روش خیلی راحت اینه که فایل برنامه رو از قسمت پوشه data برای دیگران ارسال کنی :دی
نظرات
// ارسال برنامه از طرق مختلف
public static void shareApp (Context context , String title) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(context.getPackageName(), 0);
File srcFile = new File(ai.publicSourceDir);
Intent share = new Intent();
share.setAction(Intent.ACTION_SEND);
share.setType("application/*");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(srcFile));
context.startActivity(Intent.createChooser(share, title));
} catch (Exception e) {
}
}
نظرات
برای بار سوم اصلاح شد
بالا برای اون دسته از دوستانی که ندیدن ! ، اشتراک گذاری فایل APK برنامه با بلوتوث و..
دوست عزیز این activity باید چی تعریفش کنیم؟ نمیشناستش؟
@Rooh در کل اونجا یه Context باید باشه، اگه کد رو توی یک activity نوشتید لازم نیست پاکش کنید یا بجاش از this استفاده کنید - اگه جایی نوشتید که دسترسی به Context وجود نداره هم باید یه Context به متد یا کلاسش بفرستید.
ممنون. اما میشه یه توضیحی درمورد قسمت های مختلفش بدی تا با چگونگی کارکردش هم آشنا بشیم؟
spirit من می خوام با کلیک روی باتتان مورد نظر گزینه های شیر بیاد. حالا متن بالا رو در قسمت set on click می ذارم ولی cash میکنه
5 ساعت پیش کد رو کمی تغییر دادم، الان یه متد static هست که باید بزاری توی یه کلاس و بعد صداش بزنی، دو تا ورودی داره یکی Context که تو activity میشه از this استفاده کرد یا G.context و دومی هم یه رشته هست برای عنوان دیالوگ.
منم همین کارو کردم. برای context ها G. زدم و برای title یک String title; تعریف کردم و بقیه خط ها رو در set on click ریختم.
Rooh @ به این صورت در setOnClickListener باتن کد رو استفاده کنید:
btnShare.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shareApp (G.context , "Share App") // or shareApp (ActivityName.this , "Share App")
}
});
// ارسال برنامه از طرق مختلف
public static void shareApp (Context context , String title) {
try {
PackageManager pm = context.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(context.getPackageName(), 0);
File srcFile = new File(ai.publicSourceDir);
Intent share = new Intent();
share.setAction(Intent.ACTION_SEND);
share.setType("application/*");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(srcFile));
context.startActivity(Intent.createChooser(share, title));
} catch (Exception e) {
}
}
نظرات
با تشکر من یک باتن گزاشتم به نام btnshare و کد بالا رو در اکتیویتی مربوطه گزاشتم . اجرا شده ولی با کلیک روی باتن هیچ اتفاقی نمی افته ! کار دیگری هم نیازه ؟ فایل apk رو جایی بایید بزاریم ؟ پرمیژنی نیاز نیست ؟ ممنون
view.findViewById(R.id.layShare).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
String title = "hi";
try {
PackageManager pm = G.context.getPackageManager();
ApplicationInfo ai = pm.getApplicationInfo(G.context.getPackageName(), 0);
File srcFile = new File(ai.publicSourceDir);
Intent share = new Intent();
share.setAction(Intent.ACTION_SEND);
share.setType("application/*");
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(srcFile));
G.context.startActivity(Intent.createChooser(share, title));
}
catch (Exception e) {
Toast.makeText(G.context, "کش کرد", Toast.LENGTH_LONG).show();
}
}
});
نظرات
در پاسخ بالا براتون توضیح دادم!
دقیقا متن شما رو زدم ولی cach می کنه. شاید نکته ای رو رعایت نکردم. آدرس فایلی چیزی نمی خواد؟
دوستان من هنوز مشکلم رفع نشده و کش می کنه.
دوستان لطفا بگید این catch چه چیزی رو می رسونه؟ یعنی در صورت catch می کنه؟
اگه منظورتون کرش هستش که؛ کلاس G رو داخل مانیفست تعریف کردین؟
نه منظورم کرش نیست، منظورم Catch هست try catch . یعنی انجام نمی ده عملیات رو و می خواد کرش کنه که می ره قسمت catch رو اجرا میکنه.
نیاز به پریمیشن نداره؟
سلام منم نتونستم نتیجه بگیرم نمیشه بیشتر توضیح بدید؟
این کد برای من جواب داد (فکر کنم از یکی از تاپیکهای همین جا کپی کرده بودم)
PackageManager pm = getPackageManager();
String uri = null;
for (ApplicationInfo app: pm.getInstalledApplications(0)) {
if ( !((app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1)) {
if ( !((app.flags & ApplicationInfo.FLAG_SYSTEM) == 1)) {
uri = app.sourceDir;
if (uri.contains(getPackageName())) {
break;
}
}
}
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("application/vnd.android.package-archive");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(uri)));
startActivity(Intent.createChooser(intent, "اشتراک گذاری نرم افزار"));
نظرات
فقط نمیدونم چرا اسم فایل ارسالی رو base مینویسه در هر صورت. کسی میدونه؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات