代码如下:
/**
* 打开图库
* @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">