该应用程序有一个意图过滤器,允许它通过 ACTION_SEND 意图出现在其他应用程序的共享菜单中。该应用程序本身也有一个使用 ACTION_SEND 和 createChooser() 的共享菜单,我的应用程序出现在列表中。由于他们已经在我的应用程序中,让他们能够分享回自己似乎很奇怪。
如果从我的应用程序调用我的应用程序,是否有办法不显示在列表中?
该应用程序有一个意图过滤器,允许它通过 ACTION_SEND 意图出现在其他应用程序的共享菜单中。该应用程序本身也有一个使用 ACTION_SEND 和 createChooser() 的共享菜单,我的应用程序出现在列表中。由于他们已经在我的应用程序中,让他们能够分享回自己似乎很奇怪。
如果从我的应用程序调用我的应用程序,是否有办法不显示在列表中?
这是你的解决方案。如果您想排除您自己的应用程序,您可以使用 ctx.getPackageName() 更改“packageNameToExclude”
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;
}
如果从我的应用程序调用我的应用程序,是否有办法不显示在列表中?
不是通过createChooser()
. PackageManager
不过,您可以通过和来创建自己的类似选择器的对话框,queryIntentActivities()
并通过这种方式过滤掉自己。
你应该使用
Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");