-->

通过包名创建共享意向的自定义选择器(Creating custom chooser for shar

2019-10-22 04:42发布

我在我的Android活动文本,我想给用户选择分享它的社交应用例如WhatsApp,线,Facebook,微博等。

但是,我想创建一个自定义选择器,这样它不会显示在选配意外的应用程序。

我知道这个片段的

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, "Share via"));

我怎样才能让这个在选配它会只显示我可以通过自己的包名指定的应用程序。

谢谢

Answer 1:

尽管我认为这个问题是重复的,但因为我无法找到重复的问题呢,让我先提供答案。

List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent shareInent = new Intent(Intent.ACTION_SEND);
shareInent.setType("text/plain");
List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(shareInent, 0);
// put the name of the packages you want in this ArrayList
ArrayList<String> wantedPackage = new ArrayList<>();

if (!resInfo.isEmpty()) {
    for (ResolveInfo info : resInfo) {
        Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND);
        targetedShare.setType("text/plain");
        String infoPackageName = info.activityInfo.packageName.toLowerCase();

        if (wantedPackage.contains(infoPackageName)) {
            targetedShare.putExtra(Intent.EXTRA_TEXT, "put your text here");
            targetedShare.setPackage(info.activityInfo.packageName.toLowerCase());
            targetedShareIntents.add(targetedShare);
            resPackageNames.add(infoPackageName);
        }
    }
    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Chooser title");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);
}


文章来源: Creating custom chooser for share intent by package name