2

メッセージをWeChatに共有するためのAndroidアプリがあります(SDKなし)。

StartChooser メソッドを直接使用すると、表示名「Send to Moment」と「Send to Chat」が適切に表示されます。

しかし、次のようにインテントフィルターを使用する必要のないアプリを削除したい場合、表示名の両方が「瞬間に送信」と「チャットに送信」ではなく「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」に配置すると間違ったラベルが表示されます。

UPDATE2:複数のアクションでインテントを作成する方法 で答えを見つけます。LabeledIntent を使用すると問題が解決します。

4

1 に答える 1

0

これが私がそれを機能させる方法です。

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

targetedShareIntents.add(extraIntents);
于 2014-02-10T07:51:35.107 に答える