当前位置: 首页 > 知识库问答 >
问题:

Android读取外部存储权限不起作用

宁锐
2023-03-14

我正在尝试创建一个简单的应用程序,该应用程序可以从图库应用程序获取图像并将其显示在图像按钮上。我正在运行 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的use-permission标记作为manifest的子标记:

<?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>

我在其他帖子上到处搜索,但似乎仍然无法找到为什么我仍然会得到这个讨厌的错误。

共有3个答案

邓鸿彩
2023-03-14

在某些设备上调试时,您需要通过转到设置来显式授予权限 -

桓瀚
2023-03-14

只需替换为下面的一个并尝试,

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
鲁华皓
2023-03-14

问题:
您有错误

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

原因
由于android:maxSdkVersion=“18”,您没有正确授予权限,根据文档。

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

只要您没有授予API 21权限,您的应用程序就可以正常运行。

有关详细信息,请查看本主题。

解决方案< br >如果您想根据< code>API 21授予读取权限,您必须将它们声明为:

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

重要:

这只有在你需要额外权限时才有意义,因为一些旧api需要权限,而新版本不需要,所以用户体验得到了改善,因为你只在需要时才要求某些权限。

所以(在这种情况下)正确的方法是:

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

ADD ON
如果要保存数据,您必须添加< code > WRITE _ EXTERNAL _ STORAGE 权限。

<uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 类似资料:
  • 我试图找到所有的mp3文件在存储,但我的应用程序崩溃,我使用logcat看看为什么和问题的权限访问外部存储,但我已经把权限在清单,我不知道为什么不断崩溃。第一个错误: 03-06 14:55:24.553:E/dex2OAT(2796):创建oat文件失败:/data/dalvik-cache/x86/data@app@felipe.cursoandroid.com.musicbox-2@spli

  • 问题内容: 我正在尝试创建一个可以从Gallery应用程序获取图像并将其显示在imageButton上的简单应用程序。我正在运行Android 5.0.1的手机上使用API​​ 21进行测试。不幸的是,无论我尝试什么,即使我指定了权限,我仍然会遇到安全错误。 我获取图像的代码是: 当我尝试从Dropbox选择图像时,该代码有效,但是当我从图库中选择图像时,我得到 我将READ_EXTERNAL_S

  • 在Android OS 4.0上运行我的应用程序并请求权限时,我遇到问题: 我总是接到电话 使用ActivityCompat检查权限。checkSelfPermission总是返回。 通过使用system dialog请求权限,它在OS 6.0上运行良好。Android操作系统4。除4.0之外,始终授予许可。OS 4.0其他权限(摄像头、日历、联系人、电话)运行正常,但导致此问题的。 也许是操作系

  • 在这一点上我得到了警告: 如何让它保存文件?当我在Eclipse上创建它时,这是可行的,但是现在我更新并移到了Android Studio中,它似乎坏了一些东西。

  • 有什么建议吗?它不工作在模拟器或当我在我的手机上运行它。

  • 我试图更好地理解一旦Android11版本发布,我将能够做什么。 我的应用程序使用提供的图像文件路径创建相册,但使用Android11,我将无法直接访问文件。 根据Android开发人员的文档,他们最近引入了权限,但我不明白如果添加了这个权限,我是否能够继续通过访问文件。 有人有主意吗??? 谢谢 2021年1月更新 我在一个Android11虚拟设备上试用了我的应用程序,它似乎可以完美地工作,即