我正在尝试为Android应用创建共享意图,以便将图像分享给其他应用。但是,在实现此功能时,我得到的结果非常奇怪。
我有一个分享按钮,当我点击按钮时,它会运行以下方法:
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/primitive/Primitive-79538313.jpg"
首先打开共享菜单。但是,当我点击大多数应用程序时,它会导致应用程序崩溃或者出现错误...除了Google照片,它会将照片正确上传到图库。
首先,我想知道我在其他应用中导致此问题的错误。此外,我想知道是否有人解释为什么只有Google相册允许共享功能才能运行,而我测试过的许多其他应用都没有。
供参考,以下是我使用共享意图运行的一些示例。当我尝试分享图片时,它会崩溃环聊。它使得"无法加载图像" Snapchat中的错误消息,"无法共享文件"在Slack和Gmail中,"上传不成功"在Drive中," Messenger无法处理文件" in,well,Messenger,"无法加载图片"在GroupMe中。它不会在Facebook中加载图像,但不会崩溃也不会出错。
感谢您提供的任何帮助或反馈!
修改
这似乎没有试图绕过App Permissions:
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"));
}
感谢所有回复的人!
答案 0 :(得分:-3)
将您的代码更改为此
private void shareIntent() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/jepg");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+data.get(pos).getUrl()));
startActivity(Intent.createChooser(shareIntent, "Share image"));
}
在您的活动onCreate()
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());