从Android 11开始,由于安全改进,应用程序访问外部存储空间被限制,这使一些应用程序无法使用某些文件操作。为了支持此限制,处理必须通过媒体集合(MediaStore)进行访问。
以下是一个检查权限并使用媒体存储访问文件的示例代码:
//检查存储权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE); } else { //访问文件 Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Cursor cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { String filepath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); cursor.close(); //使用filepath读取文件 } }
在Android 11中,外部目录需要通过MediaStore获取一个uri,并且在AndroidManifest.xml文件中需要使用