Search code examples
androidandroid-intentwechat

Android: Some Share Intents (WeChat, Url2Pdf) not shown right after Customizing


So I'm trying to customize the apps displayed through Intent.ACTION_SEND and it worked out really great except for WeChat and UrlToPDF. Instead of "WeChat" it is displayed as "Android-System". If I click that, it opens another intent, where the wechat-app is shown right but alone without the other Applications. What have I done wrong?

Here is the code:

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);
}

Solution

  • Try to set the component name additionally:

    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);
    }