如何动态更改选择器对话框中的操作标签?

时间:2018-04-19 01:02:33

标签: android

我的应用程序能够从其他应用程序和自身接收简单数据。当我从我的应用程序发送共享意图时,我想动态地在选择器对话框中更改我的应用程序的操作标签。有可能吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找LabeledIntent。这是解决方案:

public void openChooser() {
    Intent email = new Intent(Intent.ACTION_SEND);
    email.putExtra(Intent.EXTRA_TEXT, "This is text for sharing");
    email.setType("text/plain");

    List<ResolveInfo> candidates = getPackageManager().queryIntentActivities(email, 0);

    List<Intent> targets = new ArrayList<>();

    for(ResolveInfo candidate : candidates) {
        String name = candidate.activityInfo.name;
        String packageName = candidate.activityInfo.packageName;
        int icon = candidate.activityInfo.icon;

        Intent intent = new Intent();
        intent.setComponent(new ComponentName(packageName, name));

        if(packageName.equals(getPackageName())) {
            intent = new LabeledIntent(intent, packageName, "Your custom label", icon);
        }

        targets.add(intent);
    }

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

以下是证据:

Proof that code above works