gpt4 book ai didi

java - Android READ_EXTERNAL_STORAGE 权限不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:12 34 4
gpt4 key购买 nike

我正在尝试创建一个简单的应用程序,它可以从 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 的使用许可标记作为 list 的子标记:

<?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: 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().

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

The highest API level at which this permission should be granted to your app. Setting this attribute is useful if the permission your app requires is no longer needed beginning at a certain API level.

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

检查 this topic了解更多信息。

解决方案
如果您想在 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" />

关于java - Android READ_EXTERNAL_STORAGE 权限不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32350941/

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