1

在我的 Android 应用程序中,我从 Instragram API 加载了一个图像,并通过通用共享意图共享它,如下所示:

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
Uri uri = Uri.fromFile(file);
share.putExtra(Intent.EXTRA_STREAM,uri);

startActivity(Intent.createChooser(share, "Share Image"));

默认情况下,它会提供处理此意图的所有已安装应用程序的列表,包括 Instagram,它是图像的原始来源。如何过滤此列表以仅排除 Instagram 应用程序处理意图,同时保留所有其他内容?

4

2 回答 2

1

如何过滤此列表以仅排除 Instagram 应用程序处理意图,同时保留所有其他内容?

你不能,除非通过创建自己的选择器活动,使用queryIntentActivities()PackageManager以某种方式过滤掉 Instagram。这样做是不可靠的,仅仅是因为有多个可能的 Instagram 客户,他们的包名称不能提前确定。

我只是将 Instagram 留在那里作为一种选择。

于 2013-04-19T15:08:59.943 回答
1

我使用此代码过滤了 instagram 的共享意图。

List<Intent> targets = new ArrayList<Intent>();
Intent template = new Intent(Intent.ACTION_SEND);
template.setType("text/plain");
List<ResolveInfo> candidates = this.getPackageManager().
queryIntentActivities(template, 0);

// remove all intent except instagram in share intent
for (ResolveInfo candidate : candidates) {
    String packageName = candidate.activityInfo.packageName;
    if (packageName.contains("instagram")) {
       Intent target = new Intent(android.content.Intent.ACTION_SEND);
       target.setType("text/plain");
       target.putExtra(Intent.EXTRA_TEXT, "Text to share"));
       target.setPackage(packageName);
       targets.add(target);
    }
}
Intent chooser = Intent.createChooser(targets.remove(0), translate("Share Via"));
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, targets.toArray(new Parcelable[]{}));
startActivity(chooser);
于 2016-04-23T05:55:43.667 回答