Android READ_EXTERNAL_STORAGE权限不起作用

我正在尝试创建一个可以从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

,或者grantUriPermission()。

提供 由于,您没有正确授予权限android:maxSdkVersion="18",根据文档。

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

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

如果要 授予读取权限 ,则必须将它们声明为:

<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" />

以上是 Android READ_EXTERNAL_STORAGE权限不起作用 的全部内容, 来源链接: utcz.com/qa/429820.html

回到顶部