当前位置: 首页 > article >正文

Android14请求动态申请存储权限

Android14请求动态申请存储权限

Android14和Android15存储权限有增加多了选择部分,还是全部。一个小小的存储权限真的被它玩出了花来。本来Android13就将存储权限进行了3个细分,是图片,音频还是视频文件。

步骤一:AndroidManifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- Android 13版本适配,细化存储权限 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <!-- Android 14版本适配,部分允许还是全部允许-->
    <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
步骤二、引入Rxpermissions

你用其他请求库也行

 api 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
 api 'com.github.tbruyelle:rxpermissions:0.12'
步骤三、定义请求方法
 // 联系:893151960
 void requestStoragePermission(Context mContext, PermissionListener permissionListener) {
        if (PermissionCheckUtil.checkPermissions(mContext, PermissionNewUtils.getImageMediaPermission(mContext))) {
            permissionListener.permission(true);
        } else {
            PermissionNewUtils.requestCombinedPermission((FragmentActivity) mContext, PermissionNewUtils.getImageMediaPermission(mContext), new Consumer<Permission>() {
                @Override
                public void accept(Permission it) throws Throwable {
                    if (it.granted) {
                        permissionListener.permission(true);
                    } else {
                        boolean partGranted = false;
                        // 部分同意
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                            if (ContextCompat.checkSelfPermission(
                                    mContext,
                                    READ_MEDIA_VISUAL_USER_SELECTED
                            ) == PackageManager.PERMISSION_GRANTED
                            ) {
                                permissionListener.permission(true);
                                partGranted = true;
                            }
                        }
                        if (!partGranted) {
                            permissionListener.permission(false);
                            if (it.shouldShowRequestPermissionRationale) {
                                //禁止,不做操作
                                Toast.makeText(context, "禁止了权限", Toast.LENGTH_SHORT).show();
                            } else {
                                Toast.makeText(context, "永久禁止了权限", Toast.LENGTH_SHORT).show();
                                //永久禁止
//                                DialogUtilsKT.okAndCancel(
//                                    mContext,
//                                    mContext.getString(alwaysContent),
//                                    mContext.getString(R.string.ok_go_setting),
//                                    title = mContext.getString(alwaysTitle)
//                                ) {
//                                    PermissionNewUtils.startAppSetting(mContext)
//                                }

                            }
                        }
                    }
                }

            });
        }
    }

项目demo结构图
在这里插入图片描述有问题或者需要源码都可以私信我


http://www.kler.cn/news/312738.html

相关文章:

  • WGCAT工单系统 v1.2.1 支持导出PDF和分享创建工单功能
  • JAVA 根据开始和结束ip,计算中间的所有ip
  • 【MySQL】MySQL和Workbench版本兼容问题
  • 力扣每日一题 公交站间的距离
  • 远程访问NAS速度慢??那是因为你没用对。。。
  • 2024年9月北京docker安装+nvidia-docker
  • Clang插件演示-直接调用AI模型定义的变量完成模型推理
  • IP Source Guard技术原理与应用
  • 如何在GitHub上克隆仓库:HTTPS、SSH和GitHub CLI的区别
  • 【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
  • 【算法题】300. 最长递增子序列-力扣(LeetCode)
  • 【资料分析】刷题日记3
  • node前端开发基本设置
  • 计算机毕业设计 公寓出租系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 冷热电气多能互补的微能源网优化调度(含matlab代码)
  • MinIO自动化下载及部署脚本(Windows)
  • macOS Sequoia 15 发布,iPhone 镜像、密码应用程序、窗口平铺更新等带来全新体验
  • 数据中心一体化智能运维方案
  • tomcat中间件漏洞CVE-2017-12615,后台弱口令部署war包,CVE-2020-1938
  • 如何查看WSL默认安装位置以及挪动其到指定安装路径
  • A. Closest Point
  • LabVIEW提高开发效率技巧----使用事件结构优化用户界面响应
  • 【计算机网络 - 基础问题】每日 3 题(二)
  • JUC学习笔记(一)
  • 【Kubernetes】常见面试题汇总(十四)
  • 攻防演练篇:攻防演练场景中面临的常见加密威胁-HTTP隐蔽隧道
  • Lombok -----此java库 常用的注解及其功能总结
  • 前端vue-单选按钮的实现
  • Bigemap GIS Office 2024注册机 全能版地图下载软件
  • 操作系统的同步互斥