Android 如何从共享菜单中排除您自己的应用程序?
该应用程序有一个意向过滤器,允许它通过“发送意向”操作显示在其他应用程序的“共享”菜单中。应用程序本身也有一个使用ACTION_SEND和createChooser的共享菜单,我的应用程序出现在列表中。因为它们已经出现在我的应用程序中,所以让它们自己分享似乎很奇怪 如果从我的应用程序调用我的应用程序,是否有方法使其不出现在列表中 如果从我的应用程序调用我的应用程序,是否有方法使其不出现在列表中Android 如何从共享菜单中排除您自己的应用程序?,android,menu,android-intent,share,Android,Menu,Android Intent,Share,该应用程序有一个意向过滤器,允许它通过“发送意向”操作显示在其他应用程序的“共享”菜单中。应用程序本身也有一个使用ACTION_SEND和createChooser的共享菜单,我的应用程序出现在列表中。因为它们已经出现在我的应用程序中,所以让它们自己分享似乎很奇怪 如果从我的应用程序调用我的应用程序,是否有方法使其不出现在列表中 如果从我的应用程序调用我的应用程序,是否有方法使其不出现在列表中 不是通过createChooser。不过,您可以通过PackageManager和QueryInput
不是通过createChooser。不过,您可以通过PackageManager和QueryInputActivities创建自己的类似选择器的对话框,并通过这种方式筛选自己。您的解决方案来了。如果您想排除自己的应用程序,可以使用ctx.getPackageName更改packagenamotoexclude
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;
}
你应该使用
Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");
这是内置的东西,我可以将过滤后的列表反馈回其中,以创建共享对话框,还是必须使用列表创建自己的对话框?如果是后者,你如何让应用程序的图标出现在对话框中?谢谢。@Littleflufykitty:您可以使用自己的对话框,例如AlertDialog.Builder和setAdapter。PackageManager可以为您提供图标。谢谢你,这真的很有帮助。您有什么建议可以用来比较/过滤查询活动返回的列表和我的应用程序?我本来想用软件包的名称,但有没有更好的比较?@littleFluffyKitty:软件包名称几乎可以肯定是你最好的选择。这对我来说很有用。。只是我有一个关于targetedShareIntents.remove0的问题。。。为什么要这样做?因为您需要为选择器创建者方法提供一个意图,然后将其余的意图添加为一个额外的方法,否则将不起作用。它显示了奇怪的共享目标,并且有几个应用程序没有出现在列表中。谢谢你的灵感。