Android 意图选择器不能有空的意图目标

Posted

技术标签:

【中文标题】Android 意图选择器不能有空的意图目标【英文标题】:Android intent chooser cannot have empty intent target 【发布时间】:2018-07-22 16:00:45 【问题描述】:
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);
if (!resInfo.isEmpty()) 
    for (ResolveInfo resolveInfo : resInfo) 
        String packageName = resolveInfo.activityInfo.packageName;
        Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
        targetedShareIntent.setType("text/plain");
        targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject to be shared");
        if (TextUtils.equals(packageName, "com.facebook.katana")) 
            targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://link-to-be-shared.com");
         else 
            targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text message to shared");
        
        targetedShareIntent.setPackage(packageName);
        targetedShareIntents.add(targetedShareIntent);
    
    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
    startActivity(chooserIntent);

为了可视化共享中所需的应用程序,我需要传递:

 Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Select app to share");

为什么我需要:targetedShareIntents.remove(0) 这是否意味着从targetedShareIntents 中删除了一个意图?

我已经看到这个代码使用了很多。我不明白为什么我们需要使用 remove。谢谢

【问题讨论】:

【参考方案1】:

targetedShareIntents.remove(0) 表示删除第一个元素后抛出列表...因为第一个targetedShareIntent 包名称是 com.google.android.apps.docs 所以 文档应用程序是不必要的 .. 所以删除不必要的应用程序更好.. 因为用户不想发送数据...这就是从列表中删除targetShareIntent的原因...您可以记录并检查包名称 ...

    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(shareIntent, 0);

    Log.e("package",resInfo.get(0).activityInfo.packageName);

【讨论】:

感谢您的评论。如果我不想从targetedShareIntents 中删除任何东西我应该使用什么?我知道我试图添加一个只有 action_send 作为类型的意图,但在 Android 5 上不起作用。我在通过对话框分享的内容中看不到任何内容。 我知道你..你能在编辑问题后正确解释你的问题吗.. 如果您不想从可以使用的列表中删除任何内容...Intent chooserIntent = Intent.createChooser(targetedShareIntents, "Select app to share"); 如果您得到答案,请更新... 我不能使用 Intent chooserIntent = Intent.createChooser(targetedShareIntents, "Select app to share");因为 targetShareIntents 是一个 List

以上是关于Android 意图选择器不能有空的意图目标的主要内容,如果未能解决你的问题,请参考以下文章

Android如何根据选择器意图中的用户操作请求权限

从android中的意图选择器中选择选项(相机或画廊)后请求权限

片段中的Android选择器意图到图片照片

Android 共享意图选择器 - 与 Facebook/Twitter 社交媒体等共享文本

Android:联系人选择器意图 |无法实例化类型 Uri

如何获取前两个选择器意图并仅在android中为用户显示它们