Android各个版本存储权限适配

server/2025/1/24 16:00:11/

一、Android6.0-9.0

        1、动态权限申请:

private static String[] arrPermissions ={android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE,android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.permission.CAMERA};if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){lstUnPermissions.clear();for(int i =0; i< arrPermissions.length; i++){if(ActivityCompat.checkSelfPermission(this, arrPermissions[i])!= PackageManager.PERMISSION_GRANTED){lstUnPermissions.add(arrPermissions[i]);}}if(lstUnPermissions.size() >0 ){ActivityCompat.requestPermissions(this, arrPermissions, Request_Permission_Code);}else{//已经全部拥有权限Log.e("权限状态:", "已经全部拥有权限,无需动态申请");hasPermission_array = true;}}

        2、权限回调

//权限请求回调@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case Request_Permission_Code:hasPermission_array = true;for(int i=0;i<grantResults.length;i++) {if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {hasPermission_array = false;showPermissionSettingDialog_new();}}break;default:break;}}

        3、拒绝权限时跳转详细设置页面

private void showPermissionSettingDialog_new(){ColorDialog.OnPositiveListener btnGoPermission = new ColorDialog.OnPositiveListener() {@Overridepublic void onClick(ColorDialog dialog) {dialog.dismiss();Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", getPackageName(), null);intent.setData(uri);startActivity(intent);}};ColorDialog dialogPermission = WinShow.WinShowColorOperator(this, "权限申请", "请前往设置页面授予所有权限以继续使用",-1, btnGoPermission, "去设置");dialogPermission.getWindow().setGravity(Gravity.CENTER);}

二、Android10.0

        虽然 Android10 上面提出了外部存储分区的概念,不过之前的版本中,我们只要为应用添加了 android:requestLegacyExternalStorage="true" 就可以像之前的方式一样访问手机的外部存储空间。

        

三、Android11 及以上

        1、AndroidManifest添加权限设置

<!-- Android11额外添加 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"tools:ignore="ScopedStorage" />

        2、请求所有文件管理权限

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.R) {if (!android.os.Environment.isExternalStorageManager()) {hasPermission_files = false;ColorDialog.OnPositiveListener btnGoPermission = new ColorDialog.OnPositiveListener() {@Overridepublic void onClick(ColorDialog dialog) {dialog.dismiss();Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);intent.setData(Uri.parse("package:" + getPackageName()));startActivityForResult(intent, Request_Manage_Files_Code);}};ColorDialog dialogPermission = WinShow.WinShowColorOperator(this, "必要权限未开启", "此应用程序需要获取“访问所有文件”权限," +"才可以正常使用!请开启相关权限。", -1, btnGoPermission, "去设置");dialogPermission.getWindow().setGravity(Gravity.BOTTOM);}else{hasPermission_files = true;}}

       3、权限回调

  @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);try {switch (requestCode) {case Request_Manage_Files_Code:if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.R) {if (!android.os.Environment.isExternalStorageManager()) {hasPermission_files = false;WinShow.WinShowColor(this, "无法继续", "请先开启所有文件管理权限!", WinShow.ColorDialogType.错误);}else{hasPermission_files = true;}}break;default:break;}}catch (Exception ex){Log.e("欢迎页面回调错误",ex.getMessage());StackTraceElement[] arrErrStack=ex.getStackTrace();for(int i=0;i<arrErrStack.length;i++) {Log.e("欢迎页面回调错误:",arrErrStack[i].toString() );}}}

        参考链接:

Android 11新特性,Scoped Storage又有了新花样

Android 11 上的文件读写权限(MANAGE_EXTERNAL_STORAGE)_android 读写权限-CSDN博客

Android存储权限完美适配(Android11及以上适配)_android 11 适配-CSDN博客

安卓权限动态申请,永久禁止后跳转到权限设置页面监听回调_如何设置权限的监听回调-CSDN博客

Android 动态权限申请及回调_android 动态权限申请回调-CSDN博客

android 权限管理之判断禁止后不再提示_permision.requestandroidpermission如何关闭弹窗提示-CSDN博客

android11 权限拒绝后如何重新弹窗_mob64ca12ebb57f的技术博客_51CTO博客

Android13适配所有文件管理权限_pictureselector 安卓13-CSDN博客

Android CameraX适配Android13的踩坑之路-CSDN博客

记一个 Android 14 适配引发的Android 存储权限问题-CSDN博客

Android 11及以上授予文件管理权限-云社区-华为云

 解决Android ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION的具体操作步骤_mob649e81607bf3的技术博客_51CTO博客

实战 Android 升级目标版本到 30 过程中遇到的问题及解决办法


http://www.ppmy.cn/server/161053.html

相关文章

leetcode 2920. 收集所有金币可获得的最大积分

题目&#xff1a;2920. 收集所有金币可获得的最大积分 - 力扣&#xff08;LeetCode&#xff09; 看数据范围是需要O(n*log(n))的算法。可以用dfs记忆化搜索。 考虑到coins[i]的范围是[0, 10000]&#xff0c;最多除个十几次2就变成0了。所以用w[i][j]表述节点i在除以j次后&…

上位机知识篇---ROS2命令行命令静态链接库动态链接库

文章目录 前言第一部分&#xff1a;ROS2命令行命令1. 基础命令&#xff08;1&#xff09;ros2 run&#xff08;2&#xff09;ros2 launch&#xff08;3&#xff09;ros2 node&#xff08;4&#xff09;ros2 topic&#xff08;5&#xff09;ros2 service&#xff08;6&#xff0…

基于微信小程序的健身管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

Android 极光推送快速开发集成指南(1)

<activity android:name“cn.jpush.android.ui.PushActivity” android:configChanges“orientation|keyboardHidden” android:exported“false” android:theme“android:style/Theme.NoTitleBar” tools:ignore“DuplicateActivity”> <activity android:nam…

PyQt5之QLCDNumber

1. 描述 展示LCD样式的数字&#xff0c;它可以显示几乎任何大小的数字&#xff0c;可以显示十进制&#xff0c;十六进制&#xff0c;八进制或二进制数。 继承自QFrame 2.功能作用 (1) 构造函数 QLCDNumber(parent: QWidget None) QLCDNumber(int, parent: QWidget None)…

【Arduino】语言参考功能

前言 翻译Arduino 参考处列出的常用函数。文中为了减少篇幅&#xff0c;达到能快速翻到查询的目标&#xff0c;在介绍函数中&#xff0c;对部分内容进行了省略&#xff0c;不会列出函数输入参数类型&#xff0c;以及使用注意事项等等&#xff0c;所以若是首次使用或者是调试时出…

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…

算力需求大爆发,谁是“大推手”?

大约5亿年前&#xff0c;地球迎来了物种的突然大爆发&#xff0c;标志着生物进化除了缓慢渐变&#xff0c;还可能以跳跃的方式进行。 同样&#xff0c;人工智能在经历70余年曲折发展之后&#xff0c;也处于一个极为关键的时刻&#xff0c;在模型、数据、算力等各项基础技术多年…