В моем приложении есть кнопка «Поделиться», которая позволяет пользователю обмениваться текстом через другие приложения, такие как 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);