【问题标题】:Android: Some Share Intents (WeChat, Url2Pdf) not shown right after CustomizingAndroid:自定义后未立即显示某些共享意图(微信、Url2Pdf)
【发布时间】:2015-05-14 19:16:33
【问题描述】:

所以我正在尝试自定义通过 Intent.ACTION_SEND 显示的应用程序,结果非常好,除了微信和 UrlToPDF。它显示为“Android-System”,而不是“WeChat”。如果我点击它,它会打开另一个意图,其中微信应用程序显示正确但没有其他应用程序单独显示。我做错了什么?

代码如下:

shareIntent = new Intent(Intent.ACTION_SEND);

shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, forecastStr+" #SunshineApp");

final PackageManager pm = getActivity().getPackageManager();
final List<ResolveInfo> resInfo = pm.queryIntentActivities(shareIntent, 0);

ArrayList <String> packageAllowed = new ArrayList();
packageAllowed.add("com.twitter.android");
packageAllowed.add("com.facebook.katana");
packageAllowed.add("com.google.android.gm");
packageAllowed.add("com.whatsapp");
packageAllowed.add("com.evernote");
packageAllowed.add("ch.threema.app");
packageAllowed.add("com.skype.raider");
packageAllowed.add("com.tencent.mm");
packageAllowed.add("com.tencent.mm.ui.tools.ShareToTimeLineUI");

ArrayList <String> packageSum = new ArrayList();

if (!resInfo.isEmpty()) {
    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    for (ResolveInfo resolveInfo : resInfo) {
        String packageName = resolveInfo.activityInfo.packageName;

        if(packageAllowed.contains(packageName)){
            Intent intent=new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT, "Text");
            intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");

            intent.setPackage(packageName);
            targetedShareIntents.add(intent);
        }
    }

    int size = targetedShareIntents.size();
    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size()-1), "Share");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);
}

【问题讨论】:

  • 那是很多不相关的闲聊,请阅读help→tour

标签: android android-intent wechat


【解决方案1】:

尝试另外设置组件名称:

if(packageAllowed.contains(packageName)){
    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, "Text");
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");

    // This is new!!!
    intent.setComponent(new ComponentName(packageName, resolveInfo.activityInfo.name)); 

    intent.setPackage(packageName);
    targetedShareIntents.add(intent);
}

【讨论】:

  • 它成功了 :) 非常感谢 :) 你能解释一下为什么我必须为某些应用程序“setComponent”吗? :)
  • 对不起。我遇到了类似的问题,这解决了我的问题。但是将答案标记为解决方案并给予支持将有助于其他人确定正确的答案。
  • 我已经标记了你的答案 :) 当我获得足够的声誉时,我会给你一个支持 ;) 我不会忘记,但可能需要一些时间 ;) 再次感谢你 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多