是否可以使用CreateChooser,但实际上尚未启动意图(尚未)



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

我试图以这样的方式修改收集到Chooser的意图,使它们只是将其重定向回到我自己的应用程序。但是,我在保留他们的图标和标签方面存在问题。无论我做什么,某些选择总是将其图标和标签更改为我自己的应用程序的标签。

这大约是我当前的代码的样子:

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

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

  • 较早的通信,在需要时存储并使用它?

"选择器只是选择的接口,我不想要它 实际启动意图;我会手动启动一点 后来。"

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

"我试图修改收集到Chooser的意图 他们只是将其重定向到我自己的应用程序。"

  • 在这种情况下使用startActivityForIntent;当您意图应用程序时,关闭并返回您的应用程序,将其处理onActivityResult无论您想做什么。

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

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

最新更新