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() {
                }
            })
相关推荐
listhi52026 分钟前
Vue.js 3的组合式API
android·vue.js·flutter
用户693717500138440 分钟前
🚀 Jetpack MVI 实战全解析:一次彻底搞懂 MVI 架构,让状态管理像点奶茶一样丝滑!
android·android jetpack
2501_915918412 小时前
iOS 上架应用市场全流程指南,App Store 审核机制、证书管理与跨平台免 Mac 上传发布方案(含开心上架实战)
android·macos·ios·小程序·uni-app·cocoa·iphone
峥嵘life2 小时前
Android EDLA 打开5G热点失败分析解决2
android·5g
消失的旧时光-19434 小时前
webkitx(Android WebView 最佳实践库)--> 上
android·webview
安卓兼职framework应用工程师4 小时前
android 15.0 app应用安装黑名单
android·pms·install·rom·安装黑名单
泷羽Sec-静安4 小时前
Less-7 GET-Dump into outfile-String
android·前端·网络·sql·安全·web安全
花花鱼5 小时前
html5与android之间相互调用
android
aqi006 小时前
FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV
android·ffmpeg·音视频·直播·流媒体
●VON7 小时前
双非大学生自学鸿蒙5.0零基础入门到项目实战 -《基础篇》
android·华为·harmonyos·鸿蒙