【问题标题】:Multiple facebook and twitter icons on custom share filter chooser intent in androidandroid中自定义共享过滤器选择器意图上的多个facebook和twitter图标
【发布时间】:2018-06-16 01:32:10
【问题描述】:

我正在使用以下代码在 facebook、twitter、google+ 和其他社交应用程序上分享图像。图片是从设备的外部存储上传的。但是当我显示选择器时,会有多个 facebook 和 twitter 图标。如何限制只显示一个图标?下面是代码。

public void customShare() {
    if (file.exists()) {
        Uri uri = Uri.fromFile(file);
        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/jpeg");
        intent.putExtra(Intent.EXTRA_STREAM, uri);
        List<ResolveInfo> resInfo = this.getPackageManager().queryIntentActivities(intent, 0);

        for (ResolveInfo resolveInfo : resInfo) {
            String packageName = resolveInfo.activityInfo.packageName;
            Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
            targetedShareIntent.setType("image/jpeg");
            targetedShareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            targetedShareIntent.setPackage(packageName);
            if (packageName.equals("com.facebook.katana")  || packageName.equals("ru.ok.android") ||
                   packageName.equals("com.vkontakte.android") || packageName.equals("com.twitter.android")||
                    packageName.equals("com.whatsapp") || packageName.equals("org.telegram.messenger") ||
                    packageName.equals("com.google.android.apps.plus")) {

                targetedShareIntents.add(targetedShareIntent);
            }
        }
        Intent chooserIntent = Intent.createChooser(
                targetedShareIntents.remove(0), "");

        chooserIntent.putExtra(
                Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);
    }
}

这是选择器上显示的内容。

【问题讨论】:

    标签: android facebook twitter


    【解决方案1】:
     List<Intent> targetedShareIntents = new ArrayList<Intent>();
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setType("image/jpeg");
            intent.putExtra(Intent.EXTRA_STREAM, uri);
            List<ResolveInfo> resInfo = this.getPackageManager().queryIntentActivities(intent, 0);
    

    上面的代码重新调整了所有动作类型为Intent.ACTION_SEND的活动,Facebook有多个活动,这种类型被简化了,所以resInfo 有多个具有相同包名值 com.facebook.katana 的条目。使用resolveInfo.activityInfo.targetActivity检查所有条目的活动

     for (ResolveInfo resolveInfo : resInfo) {
                String packageName = resolveInfo.activityInfo.packageName;
    
    
                Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
                targetedShareIntent.setType("image/jpeg");
                targetedShareIntent.putExtra(Intent.EXTRA_STREAM, uri);
                targetedShareIntent.setPackage(packageName);
                if (packageName.equals("com.facebook.katana") || packageName.equals("ru.ok.android") ||
                        packageName.equals("com.vkontakte.android") || packageName.equals("com.twitter.android") ||
                        packageName.equals("com.whatsapp") || packageName.equals("org.telegram.messenger") ||
                        packageName.equals("com.google.android.apps.plus")) {
    
                    Log.d("PackageAdded", packageName+"  = ====== "+ resolveInfo.activityInfo.targetActivity);
                    targetedShareIntents.add(targetedShareIntent);
                }
            }
    

    对于解决方案,您只需删除已添加到 targetShareIntents 的现有包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多