java.lang.SecurityException: 权限拒绝:打开提供程序com.android.providers.media.Media

9

我正在遇到-

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{f1d408f 5594:firebasejobscheduler.test.com.firbasejobschedulerdemo/u0a1227} (pid=5594, uid=11227) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS

at

 bm = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);

我查看了此篇帖子,但未能解决问题。请问该如何解决?


请查看此链接:https://dev59.com/eWEh5IYBdhLWcg3wpE3w - RejoylinLokeshwaran
你的测试设备的操作系统版本是什么? - Vishal Chhodwani
棉花糖和棒棒糖是两种不同设备的操作系统版本。 - Android Developer
@RejoylinLokeshwaran 棉花糖和棒棒糖 - Android Developer
或者将您的URI更改为输入流,InputStream is = getContentResolver().openInputStream(uri); byte[] inputData = getBytes(is); is.close(); String encoded = Base64.encodeToString(inputData, Base64.DEFAULT); - RejoylinLokeshwaran
显示剩余5条评论
2个回答

2

在Marshmallow中必须检查运行时权限。 请查看此链接。 检查它是否具有READ_EXTERNAL_STORAGE权限。


2
相信我,它不起作用,SecurityException只有在您的应用程序不允许某些权限时才会出现... 您的异常正在请求android.permission.MANAGE_DOCUMENTS权限... 也尝试获取此权限。 - Chinmay Thoriya
如果您仍然想检查您的应用程序,那么在您的Android设备上,转到设置->应用程序->yourapp->权限->允许所需的所有权限,但这并不推荐,您应该提供UI以允许应用程序的权限。在这里,您可以看到所需的权限。 - Chinmay Thoriya
我已经在清单文件和运行时添加了权限,我已经检查过了。我在服务中使用 bm = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);,并且在重新启动设备后,如果我的服务启动,我会遇到这个崩溃。 - Android Developer
你是否在SharedPreferences中保存了权限状态? 如果没有保存权限状态,可能会发生这种情况。 - Chinmay Thoriya

1
public void chooseImage() {
    Intent i = new Intent();
    i.setType("image/*");
    //i.setAction(Intent.ACTION_GET_CONTENT);
    i.setAction(Intent.ACTION_OPEN_DOCUMENT);

    //ActivityResultLauncher for opening the gallery
    getImageFromGallery.launch(i);

}

chooseImage()是一个打开相册的函数。如果您已经检查过用户已经请求并接受了READ_EXTERNAL_STORAGE权限,尝试更改或注释i.setAction(Intent.ACTION_GET_CONTENT)为i.setAction(Intent.ACTION_OPEN_DOCUMENT)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接