android m 系统,Android M 系统权限说明

为了保证系统的完整性和用户的隐私,android的每一个应用运行在一个沙盒中。如果一个app想要使用本身沙盒之外的其他资源和信息,这个应用就要显示的去请求权限。按照请求权限类型的不同,这个系统可以自动的获取权限或者系统会向用户请求权限。

下面展示为了app如何去声明和请求权限。

根据权限的敏感程度,系统可以通过声明的方式(写入manifest文件)自动获得权限或者向用户请求数据。例如你的应用需要权限打开手电筒,这个系统就可以自动获取权限了。但是你的需要读取用户的联系人列表,系统就会询问用户是否批准该权限的使用。根据用户系统版本的不同,在Android5.1或者更低的版本中,用户在安装的时候授予权限,在6.0之后,在运行时候授予权限。

根据权限的敏感程度,权限分为normal和dangerous。

系统权限可以分为几种保护级别,最重要的两种是normal和dangerous。(1)Normal:normal级别的权限主要是指,需要访问本应用(沙盒)之外的数据或者资源,但是同时对用户的隐私或者对其他app的操作危害较小。

在API23中normal级别主要包含一下内容:

(2)dangerous:该应用想要使用的数据包含了用户的隐私数据,或者影响本地存储内容或者操作了其他的应用。例如,读取联系人列表的权限。这需要在运行时,显示的提醒给用户。

10a5a0f776186028417766fb8674b13b.png

Permission groups

所有的dangerous级别的权限都属于一个权限组。如果你的设备运行在Android6.0(API23)或者更高的版本中,当你请求一个权限的,系统有如下流程:

如果当你在manifest中请求了一个dangerous级别的权限时候,同时这个app没有这个权限,手机系统将通过弹出框的形式通知用户。这个弹窗框不会详细的描述组内的权限具体是什么。例如,你的应用需要Read_Contact权限,弹出框只会告诉你需要授权contact权限。如果用户授权,该应用就会拥有这个Read_Contact权限.

如果这个app已经有了这个权限了,这时候又想获取该组下的另一个权限,应用就会在没有任何提示的情况下获取该权限。例如:以上我们获取了READ_CONTACT权限,如果这时候又想使用 WRITE_CONTACT权限,系统会立刻获取该权限,不会弹出框询问用户。

注释:任何一个权限都属于一个权限分组,然而,一个权限分组只会响应drangrous级别的权限。对于normal级别的权限你可以在权限分组中忽略它们。

1.在manifest文件中声明权限

package="com.example.snazzyapp">

...

2.运行时请求权限(>=Android 6.0)

在所有的API版本中,需要使用的权限(normal 和 drangrous)都要在manifest版本中声明,但是会根据不同的target版本,处理和响应的方式不同。

有两种方式实现:

(2)使用framework层提供的方法。(使用要求编译版本大于等于Android6.0)

Check For Permissions

b4f6735113fb8e5d219f9205ff2b3be0.png

如果有这个权限返回:

RequestPermissions

有一个方法可以在用户点击拒绝授权的之后,再次使用该需要授权的功能的时候,使用它做出“为什么需要使用该权限”的解释。

返回true:用户在先前拒绝授权。

返回false:(1)如果用户在过去拒绝授权,并且选择了“Don't askagain”选项(2)这个设备“规则性(Android 安全机制)”的禁止该应用拥有该权限。

ee6bc4519b41847ab69233b1afb63fef.png

Handle the permissions request response

d85d90dccabce1ea5eadc2df0e999912.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值