Android 6.0 访问图库时,报错 requires android.permission.READ_EXTERNAL_STORAGE异常

来源:互联网 发布:画卡通人物的软件 编辑:程序博客网 时间:2024/05/23 14:17

代码如下:

   /**     * 打开图库     * @param context     * @param requestCode     */    public static void openGallery(Activity context, int requestCode) {        Intent intent = new Intent(Intent.ACTION_PICK, null);        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");        context.startActivityForResult(intent, requestCode);    }

以上代码很简单,使用Intent开启图库,挑选图片,运行效果很不理想。

Android 7.0模拟器上,报错:

11-10 10:07:02.241 4449-4468/? E/DatabaseUtils: Writing exception to parcel       java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider   uri content://media/external/file from pid=4337, uid=10049 requires android.permission.READ_EXTERNAL_STORAGE        , or grantUriPermission()       at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:608)        at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:483)        at android.content.ContentProvider$Transport.query(ContentProvider.java:212)        at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)        at android.os.Binder.execTransact(Binder.java:565)

在AndroidManifest.xml中添加权限:

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

其次,在android 6.0及其以上,需要动态赋予权限。

Android6.0动态权限

如何动态请求权限,请阅读 Android6.0权限处理篇和Android EasyPermission权限库。

注意点

若是程序中已经赋予写入权限,则不需要在写读取权限。写入权限已经包含了读取权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
阅读全文
1 0