gpt4 book ai didi

android - 未能获得 android.permission.READ_EXTERNAL_STORAGE

转载 作者:行者123 更新时间:2023-11-29 19:27:26 30 4
gpt4 key购买 nike

我正在尝试获取设备上所有图像的列表。实现这一目标的关键命令是查询命令:

       Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
null, null);

我把它放在主要 Activity 的 onCreate() 方法中。

在 list 文件中,我放置了所需的权限(在根目录下 节点):

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

据我所知,这就是我需要做的全部。然而这段代码失败(在上面的命令中)并出现安全异常,告诉我我需要 READ_EXTERNAL_STORAGE 权限。我以为我要了它,但它不在那里。我试图调试它,但它不存在。我试图在查询之前添加一个 requestPermissions(...) 命令,但它不起作用。

我得到的确切错误信息是这样的:

 java.lang.RuntimeException: Unable to start activity componentInfo{com.galamit.pic1/com.galamit.pic1.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=26249, uid=10012 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

我觉得我错过了一些非常基本的东西,但无法弄清楚它可能是什么。有什么线索吗?

编辑:请求权限部分如下所示:

if(this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_DENIED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}

最佳答案

I would like to understand why the permission requested in the manifest is not enough

如果您的 targetSdkVersion 为 24 或更高版本,它在 Android 6.0+ 设备上应该是不够的。对于更新的应用程序和更新的设备,您还必须 request certain permissions at runtimeREAD_EXTERNAL_STORAGE 就是其中之一。

您的 requestPermissions() 调用不起作用的原因是该调用不是同步的。它是异步的。在 onRequestPermissionsResult() 之前您不会知道您是否获得了许可。

因此,您需要将您的 query() 工作隔离到一个单独的方法中,您可以从两个地方调用它:

  • 它现在在哪里,当且仅当 checkSelfPermission() 表示您已经拥有权限

  • onRequestPermissionsResult(),针对您的特定请求,如果结果表明用户同意授予您权限

关于android - 未能获得 android.permission.READ_EXTERNAL_STORAGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985964/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com