该应用程序有一个意图过滤器,允许它通过ACTION_SEND意图出现在其他应用程序的共享菜单中。应用程序本身也有一个使用ACTION_SEND和createChooser()的共享菜单,我的应用程序出现在列表中。由于他们已经在我的应用程序中,让他们能够分享回自己似乎很奇怪。如何从共享菜单中排除您自己的应用程序?
如果从应用程序调用应用程序,我的应用程序是否不会出现在列表中?
该应用程序有一个意图过滤器,允许它通过ACTION_SEND意图出现在其他应用程序的共享菜单中。应用程序本身也有一个使用ACTION_SEND和createChooser()的共享菜单,我的应用程序出现在列表中。由于他们已经在我的应用程序中,让他们能够分享回自己似乎很奇怪。如何从共享菜单中排除您自己的应用程序?
如果从应用程序调用应用程序,我的应用程序是否不会出现在列表中?
如果从应用程序调用应用程序时,我的应用程序是否出现在列表中?
不通过createChooser()
。不过,您可以通过PackageManager
和queryIntentActivities()
创建自己的类似选择器的对话框,然后将自己过滤出来。
这里有你的解决方案。如果你想排除自己的应用程序,你可以改变“packageNameToExclude”与ctx.getPackageName()
public static Intent shareExludingApp(Context ctx, String packageNameToExclude, String imagePath, String text) {
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/*");
List<ResolveInfo> resInfo = ctx.getPackageManager().queryIntentActivities(createShareIntent(text,new File(imagePath)), 0);
if (!resInfo.isEmpty()) {
for (ResolveInfo info : resInfo) {
Intent targetedShare = createShareIntent(text,new File(imagePath));
if (!info.activityInfo.packageName.equalsIgnoreCase(packageNameToExclude)) {
targetedShare.setPackage(info.activityInfo.packageName);
targetedShareIntents.add(targetedShare);
}
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0),
"Select app to share");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
targetedShareIntents.toArray(new Parcelable[] {}));
return chooserIntent;
}
return null;
}
private static Intent createShareIntent(String text, File file) {
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("image/*");
if (text != null) {
share.putExtra(Intent.EXTRA_TEXT, text);
}
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
return share;
}
这是为我工作..只是我有一个关于这个targetedShareIntents.remove(0)的问题......你为什么这样做? – 2014-10-20 22:32:02
因为您需要给Chooser创建者方法一个意图,然后将其余意图添加为额外的 – Addev 2014-10-23 07:53:41
不起作用。它显示出奇怪的共享目标,并且多个应用程序不会出现在列表中。 – 2014-11-16 14:17:22
您应该使用
Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");
这有什么内置的,我可以养活我的过滤列表回进入,创建共享对话框,还是必须使用列表创建自己的对话框?如果是后者,你如何让应用程序的图标出现在对话框中?谢谢。 –
cottonBallPaws
2010-10-31 21:30:09
@littleFluffyKitty:你会使用你自己的对话框(例如'AlertDialog.Builder'和'setAdapter()')。 'PackageManager'可以给你图标。见http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare 2010-11-01 07:04:04
谢谢,这真的很有帮助。你有什么建议,这是比较/过滤从我的应用程序queryIntentActivities()返回的列表的最佳方式?我正在考虑使用软件包名称,但有没有更好的比较? – cottonBallPaws 2010-11-01 20:37:18