Android 11(SDK_INT >= 30)后,外部存储权限android.permission.MANAGE_EXTERNAL_STORAGE

Posted zhangphil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 11(SDK_INT >= 30)后,外部存储权限android.permission.MANAGE_EXTERNAL_STORAGE相关的知识,希望对你有一定的参考价值。

android 11(SDK_INT >= 30)开始,app如果读写外部存储器须申请权限android.permission.MANAGE_EXTERNAL_STORAGE

原先的:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

搭配在AndroidManifest.xml的application里面配置:

android:requestLegacyExternalStorage="true"

已失效。

新的解决方案:

首先在AndroidManifest.xml里面申请权限:

    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

然后在上层Java代码的运行时判断,如果没有获得完全的外部存储器读写权限,则运行时申请:

if (Build.VERSION.SDK_INT >= 30) 
            if (!Environment.isExternalStorageManager()) 
                Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                startActivity(intent);
                return;
            
        

/**
开始接着正常的写读写文件操作...
*
/

以上是关于Android 11(SDK_INT >= 30)后,外部存储权限android.permission.MANAGE_EXTERNAL_STORAGE的主要内容,如果未能解决你的问题,请参考以下文章

Android11(api 30)以上设置全屏不起作用的解决方法

Android知识点:隐藏底部虚拟按键

Android 屏蔽下方虚拟按键

Android Studio调用系统的代码中Build.VERSION.SDK_INT >= Build.VERSION_CODES.xxx

Android 11 运行时权限

Android Studio调用系统的代码中Build.VERSION.SDK_INT >= Build.VERSION_CODES.xxx