中国公司查询网站上海网络排名优化
1版本说明
在 Android 10(API 级别 29)及以下版本中,申请权限可以使用WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限请求文件存储权限。但从 Android 11(API 级别 30)开始,Google引入了一种新的管理存储权限机制,用于处理所有文件访问。对于这种情况,你需要使用 MANAGE_EXTERNAL_STORAGE 权限。
以下是如何在 AndroidManifest.xml 中设置当前私有方法 requestPermission 所涉及的权限:
AndroidManifest.xml 配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.yourapp"><!-- 其他元素,例如 application 及其下属元素 --><uses-permission android:name="android.permission.CAMERA" /><!-- Android 11 (API 级别 30)及以上版本访问所有文件的权限 --><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><!-- 在安卓系统中请求写入和读取外部存储的权限(针对 Android 10 及以下版本) --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /></manifest>
同时,也需要在代码中动态申请权限。比如在Activity中。代码如下:
private void requestPermission() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//30if (!Environment.isExternalStorageManager()) {//跳转到设置界面引导用户打开Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);intent.setData(Uri.parse("package:" + getPackageName()));startActivityForResult(intent, PERMISSIONS_REQUEST_CODE);}}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == PERMISSIONS_REQUEST_CODE) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {if (Environment.isExternalStorageManager()) {Log.d(TAG, "onActivityResult: permission success");} else {Toast.makeText(this, "存储权限获取失败", Toast.LENGTH_SHORT).show();}}}}