当前课程知识点:Android应用开发基础 > 第七章 内容提供者ContentProvider > 7.1 Android运行权限 > 7.1 Android运行权限
本节我们介绍Android的运行权限
Android开发常常遇到的一个问题
就是在Android APP安装的过程中
会向用户请求一大堆权限
不同意不会让你安装
不知不觉中
也许有些敏感权限就这样被授予了
为了解决这个问题
Android6.0后推出了运行时权限
敏感权限在真正使用的时候会向用户提示
用户的安全性和隐私得到保护
仅仅需要做一些适配工作
如果设备运行的是Android 6.0
API级别23或更高版本
并且应用的targetSdkVersion
是23或更高版本
则应用在运行时向用户请求权限
用户可随时调用权限
因此应用在每次运行时
均需检查自身是否具备所需的权限
下图是Android 8.0上使用知乎的一个例子
如图所示
使用知乎的拍摄功能
依次会弹出相机权限
麦克风权限
用户运行程序获取权限后
如果要取消这些权限
可以进入设置的应用权限管理
取消知乎的相机和麦克风权限
谷歌将新的权限分为两类
一类是正常权限
比如联网
震动一类的
这类权限跟之前一样
清单文件声明后直接授予
另一类是危险权限
手机常用软件的权限管理如图所示
从微信 360手机助手
12306订票软件的权限管理可以看到
读取联系人
存储 位置 电话 相机 短信 传感器
麦克风 相机 定位等涉及用户隐私的
需要在使用时通知用户进行授权
安卓的权限组的名称如图所示
Android6.0之前用户安装app
只需要把app需要权限列表列出告知用户
app安装后都可以访问这些权限
在Android6.0之后
敏感权限可以动态申请
用户可以拒绝
已授予的权限
可以通过权限设置管理去关闭
对于开发者来说
必须对权限管理做适配
否则app访问容易出现崩溃的现象
Android的权限使用流程如图所示
应用如果需要使用权限
首先应该检查自己的权限
如果已被授予权限
则可以直接使用权限
如图没有被授予权限
可以向用户请求权限
用户同意后方可使用权限
下面我们以一个电话权限的使用实例
来讲解如何申请权限
如图所示
点击打电话按钮
由于用户没有权限
弹出权限申请界面
用户同意后进入拨打电话界面
拨打电话实例具体实现如下
第一 使用checkSelfPermission() 检查权限
请求某个权限时
检查这个权限是否已经被用户授权
已经授权的权限重复申请
可能会让用户产生厌烦
比如电话权限名称为
Manifest.permission.CALL_PHONE
函数返回值
与PackageManager.PERMISSION_GRANTED比较
一致则代表有权限
不一致代表没有权限
第二 使用requestPermissions()申请权限
调用后系统会显示一个
请求用户授权的提示对话框
App不能配置和修改这个对话框
如果需要提示用户这个权限相关的信息或说明
需要在调用requestPermissions() 之前处理
该方法有两个参数
第一 int requestCode
会在回调onRequestPermissionsResult()时返回
用来判断是哪个授权申请的回调
第二 String[] permissions
权限数组
你需要申请的的权限的数组
由于该方法是异步的
所以无返回值
当用户处理完授权操作时
会回调Activity或者Fragment的方法
第三 在Activity或者Fragment中
重写onRequestPermissionsResult()的方法
处理权限结果回调
当用户处理完授权操作时
系统会自动回调该方法
该方法有三个参数
1. int requestCode
在调用requestPermissions()时的第一个参数
2. String[] permissions
权限数组
在调用requestPermissions()时的第二个参数
3. int[] grantResults
授权结果数组
4. 获取权限后
使用系统Intent.ACTION_CALL值
来调用系统功能
那么这就是我们使用权限申请
来完成电话拨打的一个实例
-Android Studio4.1.2安装常用问题汇总2021.3.15
-1.1 Android概述
--1.1 Android Studio安装与配置-实践案例
-1.1 Android概述--作业
-1.2 Android程序
-1.2 Android程序--作业
-1.3 Android程序调试
-1.3 Android程序调试--作业
-2.1 Activity概述
-2.1 Activity概述--作业
-2.2 Activity应用
-第2章 Android视图--2.2 Activity应用
-3.1 Activity布局
-3.1 Activity布局--作业
-3.2 Android基础组件
-3.2 Android基础组件--作业
-3.3 Android中级组件
-3.3 Android中级组件--作业
-3.4 Android适配器
-3.4 Android适配器--作业
-4.1 Fragment碎片组件
-4.1 Fragment碎片组件--作业
-4.2 ViewPager翻页类组件
-4.2 ViewPager翻页类组件--作业
-讨论:fragment与activity的生命周期有哪些不同?
-5.1 Android广播概述
-5.1 Android广播概述--作业
-5.2 Android广播工作原理
-5.2 Android广播工作原理--作业
-5.3 自定义广播
-第5章 广播--5.3 自定义广播
-5.4 有序广播
--5.4有序广播
-第5章 广播--5.4 有序广播
-6.1 系统服务概述
-6.1 系统服务概述--作业
-6.2 访问系统服务
-6.2 访问系统服务--作业
-6.3 自定义服务
-第6章 Android服务--6.3 自定义服务
-6.4 多线程
--6.4 多线程
-第6章 Android服务--6.4 多线程
-7.1 Android运行权限
-7.1 Android运行权限--作业
-7.2 URL URI概述
-第7章 内容提供者ContentProvider--7.2 URL URI概述
-7.3 ContentProvider概述
-第7章 内容提供者ContentProvider--7.3 ContentProvider概述
-7.4 访问通讯录
-第7章 内容提供者ContentProvider--7.4 访问通讯录
-7.5 课后作业案例
-8.1 相机服务
--8.1 相机服务
-8.1 相机服务--作业
-8.2 音视频服务
-8.2 音视频服务--作业
-9.1 网络服务概述
-9.1 网络服务概述--作业
-9.2 网络框架
--9.2 网络框架
-9.2 网络框架--作业
-9.3 Json
--9.3 Json
-第9章 网络技术--9.3 Json
-9.4 Volley
-第9章 网络技术--9.4 Volley
-10.1 文件存储
--10.1.3 实践案例-SharedPreference文件读写
-10.1 文件存储--作业
-10.2 数据库存储
-10.2 数据库存储--作业
-第1章 实训简介以及开发环境配置
-第2章 在线音乐播放器整体设计以及服务端开发
-第3章 在线音乐播放器-客户端开发
-第4章 在线音乐播放器-完整版
-第5章 QQ聊天项目
-第6章 在线点餐系统