在我的应用程序中,我有一个共享按钮,该按钮允许用户通过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);
答案 0 :(得分:0)
“但是我需要先与服务器进行一些通信”
“选择器只是选择的接口,我不想要它 真正开始意图;我会手动手动启动 以后。”
ModalBottomSheet
reference会根据需要为自己实现自定义选择器。“我试图修改收集到选择器中的意图 这样他们就可以直接重定向回我自己的应用。”
startActivityForIntent
;当您打算使用某个应用程序时,请关闭并返回到您的应用程序,onActivityResult
对其进行任何处理。“但是,我在保留其图标和标签时遇到问题。”