java - Android Sharing Intent 仅适用于 Google Photos,会导致其他应用程序崩溃

标签 java android android-intent

<分区>

我正在尝试为 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"));
}

感谢所有回复的人!

最佳答案

将你的代码改成这样

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"));
}

将此代码添加到您的 Activity onCreate()

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

关于java - Android Sharing Intent 仅适用于 Google Photos,会导致其他应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46922705/

相关文章:

java - 使用类名创建实例并调用构造函数

android - 如何从 MapController 捕获放大/缩小动画的结尾?

java - 针对 Spring Security 的应用程序身份验证

android - 我在这里做错了什么? Android上下文菜单长按

java - Android JSON 解析导致应用程序 AsyncTask 崩溃

java - 将 JPopupMenu 添加到 TrayIcon

android - 电子邮件 Intent 不再适用于 Android Lollipop

android - 避免其他 Android 应用程序收听我的广播?

java - 将属性文件保留在单独的 Java 项目中的最佳方法或最佳实践是什么?

android - 如何以uri的形式从 Intent 中获取数据?