- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
龙图教育:AndroidM的权限机制龙图教育:AndroidM的权限机制
龙图教育:Android M 的权限机制
在Android M版本发布之前,Android系统中的权限模式一直采取较为简单粗暴的处理方式——即在安装之时由用户作出全部允许或者全不允许的二元选择。这意味着如果用户希望使用某款应用程序,则首先需要接受其中包含的全部权限要求或者干脆放弃安装。这就导致很多开发人员的编程成果在安装之时就被用户所弃用,根本无法真正实现用户与开发者间的信任关系乃至其它隐私保障手段。
而在新的权限模式之下,用户将能够根据自己的实际需要在运行时中对各项权限进行审核,且随时关闭其中的部分权限。在今天的文章中,龙图教育(专业做游戏开发培训机构)小编将与你共同了解如何处理权限机制中出现在新型变更,并掌握它们给开发人员乃至用户使用体验带来的实际影响。
值得强调的是,这篇文章是在Android M正式版本发布之前所写成,因此其中一部分信息可能在未来出现变动。
1.?哪些部分要求对应权限?
尽管Android M仍然要求开发者在AndroidManifest.xml当中进行权限声明,但用户现在已经能够在运行时当中对应用所使用的权限进行审核或者撤销。在这套Android新版本当中,最重要的变动就是android.permission.INTERNET与android.permission.WRITE_EXTERNAL_STORAGE已经从危险评级恢复到了普通等级。这意味着我们用不着再使用之前针对这二者向用户提出申请。
在发出权限审核请求时,用户将需要根据权限组对其提供授权,而非对组内的各单独权限作出审核。这意味着如果我们的应用程序需要同时发送及收取短信消息,那么用户只需要批准短信权限组即可。下面这份列表为Android M开发者预览版2当中能够从系统设置中直接查看到的各受支持权限组。
另外需要注意的是,Android是一套强大的Intent系统,它允许开发人员获取来自其它应用程序的数据。相较于申请摄像头使用权限并开发出一款能够使用Camera API的应用,大家现在可以要求用户利用现有受信拍照应用拍摄一幅图像,从而帮助自己的应用程序获取所需之图像素材。这些与摄像头相关的权限将由拍照应用负责处理,而非应用程序本身。
2.?如何要求获取权限?
当大家需要使用某项要求权限审核机制的功能时,系统会执行一系列事件流程。我们首先需要查看该权限是否已经为用户所允许。
如果用户此前尚未批准这项权限,那么大家可以通过权限请求对话框的形式向用户作出提示。在首次弹出权限请求对话框时,用户需要在拒绝与接受二者之间作出选择。
不过如果用户此前已经拒绝了相关权限的请求,并再次面对同样的请求,这时他们将看到额外的选项——即永远停止显示此类权限请求询问。
大家可以在请求某项权限之前通过调用checkSelfPermission来检查用户此前是否已经通过了该权限授权。这项方法会根据权限是否得到批准而返回一个int值。
如果返回结果为PackageManager.PERMISSION_GRANTED,那么大家可以继续根据既定设计思路推进。不过如果该权限此前尚未得到批准,那么我们需要利用requestPermissions向用户发出请求,利用一个权限字符串数组进行传递,并利用一段自定义int请求代码对应用的逻辑流程进行追踪。
?int?hasLocationPermission?=?checkSelfPermission(?Manifest.permission.ACCESS_FINE_LOCATION?);?
int?hasSMSPermission?=?checkSelfPermission(?Manifest.permission.SEND_SMS?);?
ListString?permissions?=?new?ArrayListString();?
if(?hasLocationPermission?!=?PackageManager.PERMISSION_GRANTED?)?{?
????permissions.add(?Manifest.permission.ACCESS_FINE_LOCATION?);?
}?
??
if(?hasSMSPermission?!=?PackageManager.PERMISSION_GRANTED?)?{?
????permissions.add(?Manifest.permission.SEND_SMS?);?
}?
??
if(?!permissions.isEmpty()?)?{?
????requestPermissions(?permissions.toArray(?new?String[permissions.size()]?),?REQUEST_CODE_SOME_FEATURES_PERMISS
文档评论(0)