<分区>
我正在尝试为 Android 应用程序创建共享 Intent 以将图像共享给其他应用程序。但是,在实现此功能时我得到了这个非常奇怪的结果。
我有一个分享按钮,当我点击该按钮时,它会运行以下方法:
private void shareIntent() {
Uri currUri = Uri.parse(data.get(pos).getUrl());
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setAction(Intent.ACTION_SEND);
sharingIntent.putExtra(Intent.EXTRA_STREAM, currUri);
sharingIntent.setType("image/jpg");
startActivity(Intent.createChooser(sharingIntent, getResources().getText(R.string.share_to)));
}
data.get(pos).getUrl() 返回我创建的实现 Parcelable 的自定义类的 URL,当打印出来时,它返回如下目录:“/storage/emulated/0/Pictures/原始/原始-79538313.jpg"
Intent 首先起作用,打开共享菜单。但是,当我点击大多数应用程序时,它要么使应用程序崩溃,要么给出错误……Google 相册除外,它会将照片正确上传到图库。
首先,我想知道我做错了什么导致其他应用程序出现此问题。另外,我想知道是否有人可以解释为什么只有 Google Photos 允许共享功能,而我测试过的许多其他应用程序却不允许。
作为引用,以下是我使用共享 Intent 运行的一些示例。当我尝试分享图片时,环聊崩溃了。它在 Snapchat 中给出“无法加载图像”错误消息,在 Slack 和 Gmail 中给出“无法共享文件”,在 Drive 中给出“上传失败”,在 Messenger 中给出“Messenger 无法处理文件”,以及“GroupMe 中无法加载图像”。它不会在 Facebook 中加载图像,但不会崩溃也不会出错。
感谢您提供的任何帮助或反馈!
编辑:
这似乎在不尝试绕过应用程序权限的情况下起作用:
private void shareIntent() {
File imageFile = new File(data.get(pos).getUrl());
Uri uriToImage = FileProvider.getUriForFile(
this, BuildConfig.APPLICATION_ID + ".provider", imageFile);
Intent shareIntent = ShareCompat.IntentBuilder.from(DetailActivity.this)
.setStream(uriToImage)
.getIntent();
shareIntent.setData(uriToImage);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, "Share image"));
}
感谢所有回复的人!