我正在尝试使用文件提供程序在应用程序的存储中存储位图,然后通过ACTION_SHARE共享它, 我试图在共享图像时避免读取外部存储权限(它是应用程序当前视图的屏幕截图 - >位图)。
虽然我添加了FLAG_GRANT_READ_URI_PERMISSION标志,但接收器应用程序总是要求权限,如果我授予权限,则接收方应用程序可以访问该图像,否则接收方应用程序不会显示该图像。
有人可以解释问题是什么吗?
我应该创建自定义ContentProvider而不是使用FileProvider吗?
这是我的代码:
Manifest:
<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.user.samplescreenshotapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
xml/filepaths:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="shared_images" path="images/"/>
</paths>
触发共享的代码:
File imagePath = new File(getCacheDir(), "images");
File newFile = new File(imagePath, "image.png");
Uri contentUri = FileProvider.getUriForFile(this, "com.example.user.samplescreenshotapp.fileprovider", newFile);
Intent shareIntent = new Intent(Intent.ACTION_SEND, contentUri);
shareIntent.setData(contentUri); //Tried with and without this
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //Tried with setFlag also
//shareIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
shareIntent.putExtra(Intent.EXTRA_TEXT, "sharing..");
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
shareIntent.setType("image/png");
startActivity(shareIntent); //Also tried startActivity(Intent.createChooser(shareIntent, "send"));