How to exclude your own app from the Share menu?

2019-03-12 06:43发布

The app has an intent filter to allow it to appear in the share menu in other applications via ACTION_SEND intents. The app itself also has a share menu using ACTION_SEND and createChooser(), and my app appears in the list. Since they are already in my app it seems strange to have them be able to share back to itself.

Is there a way for my app not to appear in the list if it's being called from my app?

3条回答
劫难
2楼-- · 2019-03-12 07:16

Here goes your solution. If you want to exclude your own app you can change "packageNameToExclude" with 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;
}
查看更多
仙女界的扛把子
3楼-- · 2019-03-12 07:20

Is there a way for my app not to appear in the list if it's being called from my app?

Not via createChooser(). You can create your own chooser-like dialog via PackageManager and queryIntentActivities() and filter yourself out that way, though.

查看更多
手持菜刀,她持情操
4楼-- · 2019-03-12 07:42

You should use

Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");
查看更多
登录 后发表回答