Android:无法从SD卡共享图像

时间:2017-10-18 21:29:41

标签: android image file uri

我尝试与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

1 个答案:

答案 0 :(得分:0)

您可能正在为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);