Zhe*_*ryu 12 java android android-gallery android-permissions android-5.0-lollipop
我正在尝试创建一个简单的应用程序,可以从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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从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()
Run Code Online (Sandbox Code Playgroud)
我为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>
Run Code Online (Sandbox Code Playgroud)
我在其他帖子上搜索过高低,但仍然无法弄清楚为什么我仍然会遇到这个麻烦的错误.
Jor*_*lla 14
问题
你有错误
java.lang.SecurityException:Permission Denial:读取com.android.providers.media.MediaProvider uri content:// media/external/images/media/35634 from pid = 25240,uid = 10070 r equires 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" />
Run Code Online (Sandbox Code Playgroud)
重要:
这只有在你需要提供额外权限时才有意义,因为一些旧的api需要新版本没有的权限,因此用户体验得到了改善,因为你只需要在需要时获得某些权限.
所以(在这种情况下)正确的方法是:
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
ADD ON
如果要保存数据,则必须添加WRITE_EXTERNAL_STORAGE权限.
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29028 次 |
| 最近记录: |