感觉自己干什么都不行,怎么办?

小说:感觉自己干什么都不行,怎么办?作者:安公戏更新时间:2019-03-26字数:60378

Android 6.0起,Android加强了权限管理,引入运行时权限概念。对于:

1. Android 5.1(API 22)及以前版本,应用权限必须声明在AndroidManifest.xml中,应用在安装时,Android会列出其所需的所有权限供用户确认安装。

2. Android 6.0(API 23)及以后版本,应用权限必须声明在AndroidManifest.xml中,但权限分为普通权限(Normal Permissions)和危险权限(Dangerous Permissions),以下会介绍区别:

 

普通权限:不会给用户隐私带来风险

应用声明在AndroidManifest.xml,系统会自动授予,无需应用申请。

 

危险权限:应用访问用户机密数据的权限,会有风险

1. 此权限也必须声明在AndroidManifest.xml中

2. 此类权限属于运行时权限,应用在启动后,需执行相关需此类权限的操作前,需调用系统API弹窗让用户授权,弹窗内容应用不可修改。如果缺少运行时权限(用户未授权),那么应用强行执行操作或调用API会引起APP FC。如下:

3-10 04:47:44.274 10405 8714 8714 E AndroidRuntime: java.lang.RuntimeException: Unable to create service xxxxxx.SmsBackgroundService: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.telephony.MmsSmsProvider from ProcessRecord{48bbdaa 8714:xxxxxx/u0a405} (pid=8714, uid=10405) requires android.permission.READ_SMS or android.permission.WRITE_SMS

 

运行时权限的三种状态:允许询问(USER_SET),拒绝(USER_FIXED)。用户可以在系统的权限管理中管理应用的每一项权限的状态。

 

那么,应用该如何适配运行时权限,其标准做法是什么?

1. 在AndroidManifest.xml列出所有所需的权限,包括普通权限和危险权限

2. 应用启动后,需调用所需运行时权限的API前,先调用系统API,如checkSelfPermission来查询自身是否已获取相关权限,如已获取,可继续正常执行API或后续操作等,下面用伪代码表示

 1 if (checkSeflPermission(...)) {
 2        // 应用未获取此危险权限
 3       if (shouldShowRequestPermissionRationale(...)) {
 4              // 用户对此权限是拒绝状态,此时应用可自行弹窗告知用户,注意:如果用户在拒绝时勾选了“不再询问”,此方法会返回false,不再可靠,则可在onRequestPermissionsResult方法中再执行类似以下操作
 5              // 例如百度地图的做法,会弹窗,告知用户缺少相关权限,请点击跳转到设置页面,进行权限开启,这也是多数应用的标准做法
 6              // ......
 7       } else {
 8              // 用户对此权限是询问状态,应用可调用系统API弹窗去申请权限,用户操作结果可在overload方法onRequestPermissionsResult中处理
 9              requestPermissions(...);
10       }
11 } else {
12         // 已有此危险权限,后面可放心执行相关操作
13         // ..... 
14 }

 

最后,列出所有的危险权限,注意,这里有权限组(Permission Groups)的概念,申请某个具体的权限时,系统在弹窗中只会告知用户应用所需访问的权限组,并不会描述该具体权限。如果某个权限组中,应用一个权限都还没被授权,则会弹窗供用户选择授权;如果某个权限组中,应用已被授权了其中一个权限,那么应用再次申请同一个权限组内其他权限时,会被自动默认授权。

 

参考:

1. https://developer.android.com/training/permissions/requesting.html?hl=zh-cn

2. https://developer.android.com/training/permissions/best-practices.html?hl=zh-cn

3. https://developer.android.com/guide/topics/security/permissions.html?hl=zh-cn#normal-dangerous

 

2018,加油! 2018.3.16

 

当前文章:http://adsl66.com/list_51128.html

发布时间:2019-03-26 11:08:47

【情感问答】公务猿之2个美女,如何抉择 宝宝皮肤过敏不能吃什么 春节团聚时需关注的儿童心理 他们凭什么成为罗德学者 出轨女再回头,该不该再接受? 终于找到适合自己的学习方法 所有在朋友圈传播这些文章的人,都是凶手 路过最冷的夜,才有最暖的光 终于找到适合自己的学习方法 当面训老公,“伤”了你孩子

56902 66580 53153 26538 86220 35760 56387 45778 36927 21096 92248 61334 45783 75675 99636 45743 31536 60922 68264 48522 77258 88881 15278

我要说两句: (0人参与)

发布