обе метки показывают WeChat, когда делятся с другом и временной шкалой WeChat

У меня есть приложение для Android, чтобы поделиться сообщением с WeChat (без SDK).

Когда я напрямую использую метод StartChooser, отображаемое имя «Отправить в момент» и «Отправить в чат» отображается хорошо.

Но когда я хочу удалить приложения, которые мне не нужны, используя фильтр намерений, как показано ниже, возникает проблема, заключающаяся в том, что оба отображаемых имени показывают «WeChat», а не «Отправить в момент» и «Отправить в чат». Но в то же время их значок правильный!

Кто может сказать мне, как получить правильный ярлык дисплея?? Спасибо!

Intent it = new Intent(Intent.ACTION_SEND);
it.setType("image/*");
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(it, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
if (!resInfo.isEmpty()) {
    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    for (ResolveInfo info : resInfo) 
    {
        Intent targeted = new Intent(Intent.ACTION_SEND);
        targeted.setType("image/*");
        ActivityInfo activityInfo = info.activityInfo;

        if (activityInfo.packageName.contains("tencent.mm") || etc..) 
        {
            targeted.setClassName(activityInfo.packageName, activityInfo.name);
            targeted.setPackage(activityInfo.packageName);

            targeted.putExtra(Intent.EXTRA_TEXT, "share text");
            targeted.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            targetedShareIntents.add(targeted);
        }
    }

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

!!! Обновить !!! :

если намерение wechat помещается в «Intent.createChooser», отображаемая метка правильная, но отображается неправильная метка при размещении в «EXTRA_INITIAL_INTENTS».

ОБНОВЛЕНИЕ 2: я нахожу ответ на странице How to сделать намерение с несколькими действиями. Использование LabeledIntent решит проблему.


person ray    schedule 30.12.2013    source источник


Ответы (1)


Вот как я заставляю это работать.

CharSequence label = info.loadLabel(getPackageManager());
Intent extraIntents = new LabeledIntent(targeted, activityInfo.packageName, label, info.icon);

targetedShareIntents.add(extraIntents);
person ray    schedule 10.02.2014
comment
Можем ли мы запустить любую группу WeChat, используя этот метод? - person suv; 10.08.2018