android 11后文件读写访问权限申请

android 11后对文件读写访问权限管理 与 android 10又有了新的要求,导致在读写或者访问时出现error:java.io.FileNotFoundException: /storage/emulated/0/file_path open failed: EACCES (Permission denied),以下为android 11文件管理权限申请办法

复制代码
import android.provider.Settings
 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R){
    val uri = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
 
    startActivity(
        Intent(
            Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
            uri
        )
    )
}

回忆android 10 文件访问权限申请

step 1: AndroidManifest中添加权限申请配置

复制代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
 
<application android:requestLegacyExternalStorage="true">
 
 
  <provider android:name="androidx.core.content.FileProvider"
            android:authorities="com.xxx.xxx.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths_app" />
  </provider>
 
 
</application>

step 2: res/xml 资源文件夹下创建file_paths_app.xml 名称可以随意,与provider中配置resource同步

复制代码
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <paths>
        <external-path
            name="external-path"
            path="." />
 
        <external-files-path
            name="external-files-path"
            path="." />
 
        <external-cache-path
            name="external-cache-path"
            path="." />
 
        <files-path
            name="files-path"
            path="." />
 
        <cache-path
            name="cache-path"
            path="." />
    </paths>
</resources>

Tag 对应的路径
root-path  根目录/
files-path /data/user/0/<package_name>/files 或者/data/data/<package_name>/files 这两个目录指向相同的位置
cache-path /data/user/0/<package_name>/cache 或者 /data/data/<package_name>/cache
external-path  /storage/emulated/0或者/sdcard/
external-files-path    /storage/emulated/0/Android/data/<package_name>/files 或者 /sdcard/Android/data/<package_name>/files
external-cache-path    /storage/emulated/0/Android/data/<package_name>/cache 或者 /sdcard/Android/data/<package_name>/cache

step 3:调用文件读写权限申请

复制代码
AppPermissionReq.INSTANCE.permissionReq(
            this,
            defPermissions,
            object : PassPermission {
                override fun unauthorized() {
                }
 
                override fun authorized() {
                }
            })
相关推荐
CYRUS_STUDIO7 小时前
Frida 检测与对抗实战:进程、maps、线程、符号全特征清除
android·逆向
csj508 小时前
安卓基础之《(28)—Service组件》
android
lhbian10 小时前
PHP、C++和C语言对比:哪个更适合你?
android·数据库·spring boot·mysql·kafka
catoop11 小时前
Android 最佳实践、分层架构与全流程解析(2025)
android
ZHANG13HAO12 小时前
Android 13 特权应用(Android Studio 开发)调用 AOSP 隐藏 API 完整教程
android·ide·android studio
田梓燊12 小时前
leetcode 142
android·java·leetcode
angerdream12 小时前
Android手把手编写儿童手机远程监控App之JAVA基础
android
菠萝地亚狂想曲13 小时前
Zephyr_01, environment
android·java·javascript
sTone8737513 小时前
跨端框架通信机制全解析:从 URL Schema 到 JSI 到 Platform Channel
android·前端
sTone8737513 小时前
Java 注解完全指南:从 "这是什么" 到 "自己写一个"
android·前端