无法向com.android.mms授予文件提供程序权限

时间:2017-09-03 10:44:38

标签: android android-intent android-contentprovider android-permissions android-fileprovider

我试图通过文件提供程序授予临时读取权限,从我的应用程序的缓存目录向另一个外部应用程序发送位图。当我在手机上选择消息传递应用程序(包名:" com.android.mms")时,消息传递应用程序崩溃,我收到错误:

java.lang.SecurityException: Permission Denial: reading android.support.v4.content.FileProvider uri content://com.example.brandon.emojimms2/shared_images/image.png from pid=9804, uid=10024 requires the provider be exported, or grantUriPermission()

如果需要,以下是整个错误打印输出的屏幕截图: enter image description here

我从意图选择器中选择com.android.mms时只会出现此错误。我选择的每个其他应用程序都会发送位图而不会出错。即使是较新手机上的消息系统(com.google.android.apps.messaging)也可以使用fileprovider发送位图而不会出现任何错误。我用几个模拟的手机和应用程序检查了这一点,结果总是一样。我发现唯一一个与文件提供程序有问题的应用程序是" com.android.mms"。

以下是我分享意图的代码:

private void shareImage()
{
    File imagePath = new File(mContext.getCacheDir(), "images");
    File newFile = new File(imagePath, "image.png");
    Uri contentUri = FileProvider.getUriForFile(mContext, "com.example.brandon.emojimms2", newFile);

    if (contentUri != null) {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
        shareIntent.setDataAndType(contentUri, mContext.getContentResolver().getType(contentUri));
        shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
        startActivity(Intent.createChooser(shareIntent, "Choose an app"));
    }
}

我甚至尝试过在另一个stackoverflow帖子中推荐的解决方案,该帖子建议授予每个单独的意图活动写入和读取uri权限,但这也不起作用。

0 个答案:

没有答案