Android 动态申请授权 Request App Permissions
发布日期:2021-06-30 14:57:41
浏览次数:2
分类:技术文章
本文共 1851 字,大约阅读时间需要 6 分钟。
相关知识点
-
写外部存储器
-
已将权限授予给定的包
-
检测 App 当前是否有XXX的权限
-
动态向用户申请权限
-
动态向用户申请权限,用户操作后的回调
代码
基本逻辑就是:
- 运行时当每一次需要使用某一权限,首先检测是否已经获得授权。
- 如果已经授权,直接使用。
- 否则动态申请用户授权。(用户会看到一个提示窗口,用户同意或拒绝后会触发回调)
- 回调中我们可以逐一处理每个申请的权限,判断是否获得后做相应操作。
动态申请的权限应该是 AndroidManifest.xml 中声明过的。
/** * 点击 【my_button】按钮, */ @OnClick(R.id.my_button) public void clickMyButton() { // 检测当前 App 是否有【写外部存储器】的权限 if (ContextCompat.checkSelfPermission(this, // 当前 activity Manifest.permission.WRITE_EXTERNAL_STORAGE) // 写外部存储器权限 != PackageManager.PERMISSION_GRANTED) { // != 已授权 // 没法有获得授权,这里则动态向用户申请权限 ActivityCompat.requestPermissions(this,// 当前 activity new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE}, // 写外部存储器权限 REQUEST_STORAGE_PERMISSION); // 自定的常量,会作为 requestCode 传给回调函数 } else { launchCamera(); // 调用相机 } } /** * 动态申请权限,用户操作后回调 * @param requestCode 申请权限时发的自定义常量 * @param permissions 应该就是 requestPermissions 的第二个参数 String[] permissions * @param grantResults 一个数组,保存着所有申请的权限结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_STORAGE_PERMISSION: { // 如果是申请【写外部存储器权限】 // 可以同时申请多个权限,所以这里是每个权限是否成功的结果。 // 上面我们只申请了一个权限,所以这里判断 > 0 后可以直接取第一个出来判断。 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 如果获得权限,执行这里: launchCamera(); // 调用相机 } else { // 如果未获得权限,弹个提示。 Toast.makeText(this, R.string.permission_denied, Toast.LENGTH_SHORT).show(); } break; } } }
转载地址:https://jerryjin.blog.csdn.net/article/details/86702460 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月10日 20时34分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
啊沙发沙发
2019-04-30
SpringBoot内置Tomcat配置参数
2019-04-30
局部加权回归
2019-04-30
Mysql 入门
2019-04-30
linux 查看文件夹权限
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30
linux 查看分区和文件大小
2019-04-30
Not using PCAP_FRAMES 解释(snort中)
2019-04-30
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Camera驱动调试小记
2019-04-30
对于中断函数返回值的分析
2019-04-30
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30
YbtOJ——递推算法【例题4】传球游戏
2019-04-30
YbtOJ——字符串处理【例题1】数字反转
2019-04-30
MatConvNet安装
2019-05-01
ROS安装与卸载
2019-05-01