java - Intent.ACTION_SEND 不适用于奥利奥

标签 java android android-8.0-oreo share-intent

<分区>

我正在开发一个自定义相机应用程序,它可以捕捉图片并将其存储在图库中。当我使用 Intent.ACTION_SEND 分享该图像时,它在所有设备上都运行良好,但具有 API 26,即 OREO 的设备除外。

我分享图片的代码是:

Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setType("image/jpeg");
            Uri uriShare = Uri.fromFile(outFile);
            //outfile is the path of the image stored in the gallery
            shareIntent.putExtra(Intent.EXTRA_STREAM, uriShare);
            startActivity(Intent.createChooser(shareIntent, ""));

谁能帮我解决这个问题?

最佳答案

如果targetSdkVersion高于24,那么FileProvider用于授予访问权限。

创建一个xml文件(路径:res\xml)provider_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path name="external_files" path="/" />
</paths>

AndroidManifest.xml 中添加一个 Provider

 <provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

替换

Uri uri = Uri.fromFile(fileImagePath);

Uri uri = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID + ".provider",fileImagePath);

你就完成了。

关于java - Intent.ACTION_SEND 不适用于奥利奥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781431/

相关文章:

android - 如何在 Oreo 中打开内部存储中的 PDF 文件?

java - 如何从数组中设置 TextView 中的文本

java - 以编程方式加载 Spring 3.1 中的属性

java - 从微调器中设置和获取文本

android - 我可以使用 greenrobot EventBus 在 Activity 和 Service 之间进行通信吗?

c# - Xamarin 如何通过单击新资源布局来打开另一个布局

API 26 上的 abd 和代码中的 ANDROID_ID 不同

java - 集成 Atmosphere(版本 1.0.13)所需的 java/scala 配置是什么?

java - 如何在java中浏览图像设置Jlabel

java - Secure.getString(mContext.getContentResolver(), "bluetooth_address") 在 Android O 中返回 null