当前位置: 首页 > 面试题库 >

Android READ_EXTERNAL_STORAGE权限不起作用

史骏祥
2023-03-14
问题内容

我正在尝试创建一个可以从Gallery应用程序获取图像并将其显示在imageButton上的简单应用程序。我正在运行Android
5.0.1的手机上使用API​​ 21进行测试。不幸的是,无论我尝试什么,即使我指定了权限,我仍然会遇到安全错误。

我获取图像的代码是:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch(requestCode){
        case PICK_IMAGE_REQUEST:
            if(resultCode == RESULT_OK && imageReturnedIntent != null && imageReturnedIntent.getData() != null) {
                Uri uri = imageReturnedIntent.getData();
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                    // Log.d(TAG, String.valueOf(bitmap));
                    ImageButton ib = (ImageButton) findViewById(R.id.inputImg);
                    ib.setImageBitmap(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            break;
    }
}

当我尝试从Dropbox选择图像时,该代码有效,但是当我从图库中选择图像时,我得到

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/35634 from pid=25240, uid=10070 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

我将READ_EXTERNAL_STORAGE的使用许可标记作为清单的子代:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="[REDACTED]">

    <uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="23" />

    <uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />

    <application>
        [REDACTED]
    </application>

</manifest>

我在其他帖子中搜索过高潮,但似乎仍然无法弄清为什么我仍然遇到这个讨厌的错误。


问题答案:

问题
您有错误

java.lang.SecurityException:权限拒绝:从pid = 25240,uid = 10070
r读取com.android.providers.media.MediaProvider uri content:// media / external
/ images / media / 35634 等于android.permission.READ_EXTERNAL_STORAGE
,或者grantUriPermission()。

回到顶端|
提供 反馈原因原因 由于,您没有正确授予权限android:maxSdkVersion="18",根据文档。

应向您的应用授予此权限的最高API级别。如果从某个API级别开始不再需要您的应用所需的权限,则设置此属性很有用。

只要您未向 API 21 应用授予权限,就可以正常运行。

解决方案
如果要 在下 授予读取权限 API 21 ,则必须将它们声明为:

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

重要:

这仅在您需要授予额外权限时才有意义,因为某些旧api需要新版本不需要的权限,因此用户体验得到了改善,因为您仅在需要时才请求某些权限。

因此(在这种情况下)正确的方法是:

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

添加
如果要保存数据,则必须添加WRITE_EXTERNAL_STORAGE权限。

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


 类似资料:
  • 如果将对象放入不同帐户(“帐户B”)的“帐户A”所拥有的存储桶中,您将无法从“帐户A”(存储桶所有者)通过S3静态网站(http)访问文件。 无论在所有对象上授予GetObject的存储桶策略如何,也无论ACL是否在对象上启用,这都是正确的。 如果尝试通过S3API(控制台/cli)从帐户a下载文件,它可以正常工作 如果试图通过S3静态网站(http)从帐户a下载文件,如果文件是由帐户B上传的,则

  • 我正在尝试创建一个简单的应用程序,该应用程序可以从图库应用程序获取图像并将其显示在图像按钮上。我正在运行 Android 5.0.1 的手机上使用 API 21 进行测试。不幸的是,无论我尝试什么,我都会收到安全错误 - 即使我指定了权限。 我获取和检索图像的代码是: 当我尝试从Dropbox中选择图像时,代码有效,但当我从图库中选择图像时,我得到 我将READ_EXTERNAL_STORAGE的

  • 我正在开发一个应用程序,它需要AndroidMarshmallow的位置权限。我遵循了实现它所需的所有步骤(函数调用)。当我运行应用程序时,它会弹出一个请求用户权限的框。当我选择是时,它会显示另一个弹出窗口,上面写着“检测到屏幕覆盖”,并将我带到显示应用程序列表的设置屏幕。在那里,我取消选中所有应用程序,然后按后退按钮返回我的应用程序。当调用回调时,我可以看到权限未被授予。它一直在发生。 为什么它

  • EDIT做了一些更多的测试:当我只配置secure-annotations=“enabled”时,基于角色的安全性工作。此外,配置pre-postannotations=“enabled”时,既不安全也不预授权。当我只配置前-后注释时,它仍然不起作用。 编辑2 更多的测试:只有secured_annotations=“enabled”,对channelservice的调用通过Cglib2AopPr

  • 问题内容: 我试图减少对phpstorm的设置,以便可以在保存时将.less文件编译为.css。我已经安装了node.js,下一步(根据此https://www.jetbrains.com/webstorm/help/transpiling- sass-less-and-scss-to- css.html )正在以下位置运行此命令:终奌站 但是,当我这样做时,我得到这些错误 我是一个完全菜鸟,不知