Как исключить собственное приложение из меню «Поделиться»? - PullRequest
19 голосов
/ 31 октября 2010

Приложение имеет фильтр намерений, который позволяет ему появляться в меню общего доступа в других приложениях через намерения ACTION_SEND. Само приложение также имеет меню общего доступа, используя ACTION_SEND и createChooser (), и мое приложение появляется в списке. Поскольку они уже есть в моем приложении, кажется странным, что они могут поделиться с самим собой.

Может ли мое приложение не отображаться в списке, если оно вызывается из моего приложения?

Ответы [ 3 ]

20 голосов
/ 22 июля 2013

Вот ваше решение. Если вы хотите исключить собственное приложение, вы можете изменить «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;
}
8 голосов
/ 31 октября 2010

Может ли мое приложение не появляться в списке, если оно вызывается из моего приложения?

Не через createChooser().Вы можете создать свой собственный диалог, подобный выбранному, с помощью PackageManager и queryIntentActivities() и отфильтровать себя таким образом.

1 голос
/ 01 октября 2016

Вы должны использовать

Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share");
...