Android图像共享意图-如何从列表中排除特定处理程序?

Android图像共享意图-如何从列表中排除特定处理程序?,android,android-intent,intentfilter,Android,Android Intent,Intentfilter,在我的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, "Sh

在我的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应用程序处理此意图,而保留所有其他应用程序

我如何筛选此列表以仅排除Instagram应用程序处理此意图,而保留所有其他应用程序

除了创建自己的选择器活动,使用
PackageManager
上的
queryIntentActivities()
并以某种方式过滤掉Instagram之外,您不能这样做。这样做是不可靠的,因为存在多个可能的Instagram客户端,它们的包名事先无法确定


我可以选择将Instagram留在那里。

我使用此代码过滤Instagram的shareintent

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);
List targets=new ArrayList();
意图模板=新的意图(Intent.ACTION\u SEND);
模板.setType(“文本/普通”);
列出候选项=this.getPackageManager()。
查询活动(模板,0);
//删除共享意图中除instagram以外的所有意图
for(ResolveInfo候选人:候选人){
字符串packageName=candidate.activityInfo.packageName;
如果(packageName.contains(“instagram”)){
意向目标=新意向(android.content.Intent.ACTION\u SEND);
target.setType(“文本/普通”);
target.putExtra(Intent.EXTRA_TEXT,“要共享的文本”);
target.setPackage(packageName);
目标。添加(目标);
}
}
Intent chooser=Intent.createChooser(targets.remove(0)、translate(“通过共享”));
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS,targets.toArray(新包裹[]{}));
星触觉(选择器);