【发布时间】:2015-12-25 15:33:18
【问题描述】:
我使用附加功能共享媒体并且有以下问题:如果我共享太多项目,共享意图会静默失败。日志中没有调试消息或类似消息,也没有延迟选择目标表……如果我共享太多项目,什么也不会发生。大约 50 件物品似乎是极限......
有人知道为什么会这样吗?或者有解决方案吗?有没有办法查明我是否共享了太多 uri?
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)));
}
【问题讨论】:
标签: android android-intent share