Я обмениваюсь средствами массовой информации с прилагаемой функцией и имею следующую проблему: если я разделяю слишком много элементов, намерение совместного использования не работает. Нет отладочного сообщения в журнале или аналогичном и без отложенного целевого листа ... Просто ничего не происходит, если я разделяю слишком много элементов. Где-то около 50 предметов, как представляется, являются предел ...Sharing Intent - бесшумно терпит неудачу, если слишком много предметов разделяются
Кто-нибудь знает, почему это происходит? Или есть решение для этого? Есть ли способ узнать, не разделяю ли я слишком много урисов?
public static void shareMediaUris(Activity activity, ArrayList<Uri> uris)
{
Intent sharingIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sharingIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);// | Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
sharingIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
sharingIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
finishShare(activity, sharingIntent);
}
public static void finishShare(Activity activity, Intent intent)
{
List<ResolveInfo> resolveInfo = MainApp.get().getPackageManager().queryIntentActivities(intent, 0);
if (!resolveInfo.isEmpty())
{
for (int i = resolveInfo.size() - 1; i >= 0; i--)
{
if (resolveInfo.get(i).activityInfo.packageName.equals(MainApp.get().getPackageName()))
resolveInfo.remove(i);
}
if (resolveInfo.size() == 0)
activity.startActivity(Intent.createChooser(intent, MainApp.get().getString(R.string.share_with)));
else
{
List<Intent> targetedShareIntents = new ArrayList<Intent>();
for (int i = 0; i < resolveInfo.size(); i++)
{
Intent targetedShareIntent = (Intent) intent.clone();
targetedShareIntent.setPackage(resolveInfo.get(i).activityInfo.packageName);
targetedShareIntent.setClassName(resolveInfo.get(i).activityInfo.packageName, resolveInfo.get(i).activityInfo.name);
targetedShareIntents.add(targetedShareIntent);
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size() - 1), activity.getString(R.string.share_with));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()]));
activity.startActivity(chooserIntent);
}
}
else
activity.startActivity(Intent.createChooser(intent, MainApp.get().getString(R.string.share_with)));
}
Спасибо за подробный ответ. Для меня предел составляет около 40 'URI', 500 будет для меня более чем прекрасным ... Любые идеи о том, как сделать это лучше? Вероятно, вы просто попробовали это, не удалив приложение из показанных целей для общего доступа ... Я ограничу элементы для обмена (что-то вроде 100 или 250 будет хорошо для меня), но что-то примерно 40 кажется слишком низким ... – prom85
@ prom85 Очевидная вещь, которую вы можете попробовать увидеть, если она что-то изменит - отключите 'finishShare' и замените ее на' activity.startActivity (Intent.createChooser (намерение, MainApp.get(). GetString (R.string.share_with))), 'просто чтобы увидеть, если ваш« предел »каким-либо образом затронут вашим вторым методом (и дайте нам знать!). Если он останется прежним - я могу просто догадаться, что ваши URI как-то больше, чем мои (я просто выбрал одно и то же изображение образца из эмулятора 500 раз). Я подумаю об этом подробнее. Тем временем я предлагаю подождать, если кто-нибудь еще сможет поделиться своими соображениями относительно вопроса. –
Ограничение влияет на мой второй метод. В любом случае (я уже забыл), теперь я использую пользовательское диалоговое окно совместного доступа и просто обрабатываю намерение общего доступа к этому диалоговому окну (без его изменения!), И в диалоговом окне отображаются возможные цели для общего доступа ... Таким образом, я могу удалить свое собственное приложение и даже отображать их так, как я хочу, и я не увеличиваю размер намерений со вторым методом ... Протестировал это сейчас, кажется, есть предел где-то около 500 ... Еще ваш ответ помогает, поскольку он указал размер поэтому я знаю, как это сделать. Спасибо – prom85