Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null );
如上代码,在运行时报错
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A33" from pid=7764, uid=10124 requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
我理解的是没有文件访问权限,那么如何才能开启访问权限呢?
动态申请
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
安卓10 AndroidManifest.xml的application里添加:
android:requestLegacyExternalStorage="true"
安卓11 新增权限:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
动态添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// 先判断有没有权限
if (Environment.isExternalStorageManager()) {
writeFile();
} else {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.setData(Uri.parse("package:" + context.getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
ToastUtils.show("取得存储权限");
} else {
ToastUtils.show("存储权限获取失败");
}
}
}
去申请 Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE 这两个权限