How to filter specific apps for ACTION_SEND intent (and set a different text for each app)

后端 未结 12 2267
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-22 01:08

How can you filter out specific apps when using the ACTION_SEND intent? This question has been asked in various ways, but I haven\'t been able to gather a

12条回答
  •  忘掉有多难
    2020-11-22 01:24

    I have improved @dacoinminster answer and this is the result with an example to share your app:

    // Intents with SEND action
    PackageManager packageManager = context.getPackageManager();
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/plain");
    List resolveInfoList = packageManager.queryIntentActivities(sendIntent, 0);
    
    List intentList = new ArrayList();
    Resources resources = context.getResources();
    
    for (int j = 0; j < resolveInfoList.size(); j++) {
        ResolveInfo resolveInfo = resolveInfoList.get(j);
        String packageName = resolveInfo.activityInfo.packageName;
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setComponent(new ComponentName(packageName,
        resolveInfo.activityInfo.name));
        intent.setType("text/plain");
    
        if (packageName.contains("twitter")) {
            intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.twitter) + "https://play.google.com/store/apps/details?id=" + context.getPackageName());
        } else {
            // skip android mail and gmail to avoid adding to the list twice
            if (packageName.contains("android.email") || packageName.contains("android.gm")) {
                continue;
            }
            intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.largeTextForFacebookWhatsapp) + "https://play.google.com/store/apps/details?id=" + context.getPackageName());
        }
    
        intentList.add(new LabeledIntent(intent, packageName, resolveInfo.loadLabel(packageManager), resolveInfo.icon));
    }
    
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.subjectForMailApps));
    emailIntent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.largeTextForMailApps) + "https://play.google.com/store/apps/details?id=" + context.getPackageName());
    
    context.startActivity(Intent.createChooser(emailIntent, resources.getString(R.string.compartirEn)).putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new LabeledIntent[intentList.size()])));
    

提交回复
热议问题