android文件访问权限怎么启动


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 这两个权限