使用ACTION_SEND在内存中共享位图而不要求读取权限

时间:2017-01-12 14:10:12

标签: java android android-intent bitmap android-bitmap

我正在尝试使用文件提供程序在应用程序的存储中存储位图,然后通过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"));

0 个答案:

没有答案