【问题标题】:Android: Cannot share image from SD cardAndroid:无法从 SD 卡共享图像
【发布时间】:2017-10-18 21:29:41
【问题描述】:

我尝试分享我 SD 卡中的图片。

类 MainActivity.java

Intent shareIntent = new Intent(Intent.ACTION_SEND);

File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

String fileName = "/cats.jpg";

File file = new File(baseDir + fileName);

Uri uri = Uri.fromFile(file);

shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);

startActivity(shareIntent.createChooser(shareIntent, "Send Picture"));

我添加到我的 Manifest.xml:

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

图片“猫”在 MySmartphone\Card\DCIM\cats.jpg

当我启动我的应用程序时,我可以选择一个应用程序来分享我的图片。但是当我打开一个时,它无法发送或打开图像。我经常吐司“不支持”或“共享图片错误”。我认为我的 uri 或文件有误,但我找不到我的错误。发短信没问题。

我的 uri: file:///data/user/0/com.example.jana.showpicture/files/cats.jpg

我的档案: /storage/emulated/0/cats.jpg

【问题讨论】:

  • mage "cats" is in MySmartphone\Card\DCIM\cats.jpg ??那是一条不存在的路径。作为程序员的你应该知道得更多。尝试找到图像的真实文件路径。
  • My uri: file:///data/user/0/com.example.jana.showpicture/files/cats.jpg 你从哪里得到这个uri?该路径将是内部私有内存。您可以使用 getFilesDir() 访问它。
  • My file: /storage/emulated/0/cats.jpg 。该路径与您的 uri 无关,因为它来自 getExternalStorageDirectory()。你的帖子一团糟。

标签: android image file uri


【解决方案1】:

您可能正在为 Android API 24 及更高版本构建。从 API 24 开始,添加了一种新的安全性。见:

https://developer.android.com/about/versions/nougat/android-7.0-changes.html#perm

您现在需要做更多的事情,将其添加到您的AndroidManifest.xml

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.example.jana.showpicture.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
</provider>

/res/xml/provider_paths.xml:

<paths>
    <external-path
        name="external_files"
        path="." />
</paths>

还有 Java:

 Uri uri = FileProvider.getUriForFile(activity,"com.example.jana.showpicture.provider",
                    file);
 shareIntent .setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                    Intent.FLAG_GRANT_READ_URI_PERMISSION);

【讨论】:

  • 感谢您的回答,但没有奏效。现在我的文件有参考:/storage/emulated/0/DCIM/cats.jpg 我的 uri 看起来像:Content://com.example.jana.sharepicture.fileprovider/external_files/DCIM/cats.jpg 该应用程序的工作原理如上所述。如果我想将我的图片作为电子邮件附件分享,我在 logcat 中遇到错误:W/System.err: stat failed: ENOENT (No such file or directory) : /storage/emulated/0/DCIM/cats,jpg
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多