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


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

    1. import android.provider.Settings
    2. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R){
    3. val uri = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
    4. startActivity(
    5. Intent(
    6. Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
    7. uri
    8. )
    9. )
    10. }

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

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

    1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    3. <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
    4. <application android:requestLegacyExternalStorage="true">
    5. <provider android:name="androidx.core.content.FileProvider"
    6. android:authorities="com.xxx.xxx.fileprovider"
    7. android:exported="false"
    8. android:grantUriPermissions="true">
    9. <meta-data
    10. android:name="android.support.FILE_PROVIDER_PATHS"
    11. android:resource="@xml/file_paths_app" />
    12. </provider>
    13. </application>

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

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <resources xmlns:android="http://schemas.android.com/apk/res/android">
    3. <paths>
    4. <external-path
    5. name="external-path"
    6. path="." />
    7. <external-files-path
    8. name="external-files-path"
    9. path="." />
    10. <external-cache-path
    11. name="external-cache-path"
    12. path="." />
    13. <files-path
    14. name="files-path"
    15. path="." />
    16. <cache-path
    17. name="cache-path"
    18. path="." />
    19. </paths>
    20. </resources>
    1. Tag 对应的路径
    2. root-path 根目录/
    3. files-path /data/user/0/<package_name>/files 或者/data/data/<package_name>/files 这两个目录指向相同的位置
    4. cache-path /data/user/0/<package_name>/cache 或者 /data/data/<package_name>/cache
    5. external-path /storage/emulated/0或者/sdcard/
    6. external-files-path /storage/emulated/0/Android/data/<package_name>/files 或者 /sdcard/Android/data/<package_name>/files
    7. external-cache-path /storage/emulated/0/Android/data/<package_name>/cache 或者 /sdcard/Android/data/<package_name>/cache

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

    1. AppPermissionReq.INSTANCE.permissionReq(
    2. this,
    3. defPermissions,
    4. object : PassPermission {
    5. override fun unauthorized() {
    6. }
    7. override fun authorized() {
    8. }
    9. })
  • 相关阅读:
    JAVA面试中的SSM框架基础面试题
    详解cv2.addWeighted函数【使用 OpenCV 添加(混合)两个图像-Python版本】
    Hutool 工具类之日期时间工具-DateUtil mysql日期字段
    Java真的不难(四十八)Redis的入门及使用(1)
    快速入门:如何使用HTTP代理进行网络请求
    【Ubuntu20.04】安装XRDP远程桌面服务
    Deforum提示词---『阿里云』万物皆可AIGC,爱视频就来AI视频!
    【PCB学习笔记】绘制智能车四层板 ---原理图绘制及编译检查
    Promise.all 使用方法
    求10的阶乘之和
  • 原文地址:https://blog.csdn.net/xiaowang_lj/article/details/133418794