在Android 11及以上的版本中,访问外部存储需要使用作用域存储。当应用程序试图访问外部存储时,如果未获得适当的权限,则会导致权限被拒绝的错误。
要解决此问题,您需要按照以下步骤进行操作:
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},READ_EXTERNAL_STORAGE_PERMISSION_CODE);
}
@Override public void onRequestPermissionsResult(int requestCode, @NotNull String[] permissions, @NotNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == READ_EXTERNAL_STORAGE_PERMISSION_CODE) { // 通过请求ID来识别正确定位的请求 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户同意了权限申请 } else { // 用户拒绝了权限申请 } } }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // 使用 MediaStore API 访问外部存储 Uri externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else { // 使用旧版本的访问方式 // 注意:在 Android 11 中,这种方式不可用 File externalStorageDirectory = Environment.getExternalStorageDirectory(); }
在使用作用域存储时,应用程序只能访问其专用目录中的数据。如果需要访问其他应用程序或用户的目录,请使用共享存储 API。