是否可以使用createChooser但实际上尚未启动意图?

时间:2019-05-17 04:32:38

标签: java android android-intent

在我的应用程序中,我有一个共享按钮,该按钮允许用户通过Messenger等其他应用程序共享一些文本。我使用createChooser来让用户选择他们想要使用的应用程序。棘手的部分是,在他们选择了应用程序之后,我不想立即启动所选的应用程序,但是我需要先与服务器进行一些通信(以获取确切的文本来共享),我也想在此阶段在屏幕上提示一些消息,然后可以启动所选应用程序的共享意图。 换句话说,选择器只是选择的接口,我不希望它真正启动意图。稍后我将手动启动它。

我试图修改收集到选择器中的意图,使它们仅重定向回我自己的应用程序。但是,我在保留其图标和标签时遇到问题。无论我做什么,某些选择总是将其图标和标签更改为我自己的应用程序中的图标和标签。

大致是我当前的代码:

PackageManager pm = activity.getPackageManager();
Intent sendIntent = new Intent()
    .setAction(Intent.ACTION_SEND)
    .putExtra(Intent.EXTRA_TEXT, text)
    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    .setType("text/plain");

List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, PackageManager.MATCH_DEFAULT_ONLY);
List<LabeledIntent> intentList = new ArrayList<>();
for (ResolveInfo ri : resInfo) {
    String packageName = ri.activityInfo.packageName;
    String name = ri.activityInfo.name;
    if (name.contains("facebook.messenger")
        || name.contains("naver.line")
        || name.contains("android.mms")
        || name.contains("clipboard")
        ) {

        ComponentName cn = new ComponentName(packageName, name);
        Intent intent = new Intent(sendIntent)
            .setPackage(packageName)
            .setComponent(cn); // I tried to do somthing here but it doesn't work

        intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
        // loadLabel and icon doesn't always get the correct thing
    }
}

Intent first = intentList.remove(0);
Intent[] extra = intentList.toArray(new Intent[0]);

Intent receiver = new Intent(activity, ShareReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT);
Intent chooser = Intent.createChooser(first, title, pendingIntent.getIntentSender());
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extra);
activity.startActivity(chooser);

1 个答案:

答案 0 :(得分:0)

  

“但是我需要先与服务器进行一些通信”

  • 通信是否更早,需要时存储和使用?
  

“选择器只是选择的接口,我不想要它   真正开始意图;我会手动手动启动   以后。”

  • 您是否听说过ModalBottomSheet reference会根据需要为自己实现自定义选择器。
  

“我试图修改收集到选择器中的意图   这样他们就可以直接重定向回我自己的应用。”

  • 在这种情况下,请使用startActivityForIntent;当您打算使用某个应用程序时,请关闭并返回到您的应用程序,onActivityResult对其进行任何处理。
  

“但是,我在保留其图标和标签时遇到问题。”

  • 您是否在选择器对话框中引用其他应用程序的图标和标签?