Android权限 - 第四篇

2311次阅读  |  发布于5年以前

原文链接 : Permissions – Part 4

在Marshmallow(棉花糖,Android6.0版本)中Android添加了一个新的权限模块,需要开发者在授权的时候做一些不同的处理。在这一系列中,我们从技术角度看下如何处理请求的权限和如何提供流畅的用户体验。

Icon_no_permission

之前我们看了检测缺失权限的机制和运行时的请求。我们考虑了所需要的权限(即那些你app的主要核心功能),但是我们还讨论了非必需的权限 - 你app的一些更好的特性所需要的权限,但不是你核心功能的部分。例如,一个相机app被拒绝了“Camera”权限,它的主要功能拍照就会变得没有任何用处;但如果它也能设置地理标签(需要“Location”权限),如果用户没有授予这个权限,地理标签的这个特性也是不可用的。

不幸的是关于非必需权限没有一个精确的定义,因为请求这样的权限的正确时间取决于你app的原理与架构。要记住更重要的事情是最好在它们被需要的时候请求。例如,地理标签的这个例子,当用户想要设置标签的时候才询问用户请求授予需要的权限。

如何明显的说明需要特别的权限也是值得考虑的。对于地理标签要明显说明,为什么“Location”权限会被需要,是因为能标记一个图片所发生的位置。然而,我们下一个系列文章需要的“Record Audio权限的理由就不是那么明显,所以我们需要解释为什么需要这个权限,以便用户有更多的信息来决定是否允许或拒绝这个权限。如果用户不知道为什么一个特别权限被需要,那么会有很大机会用户会拒绝它。

另一件值得考虑的是难对付的用户。看起来容易简单的预先请求所有的权限是因为那样更容易写代码。依我看来,这是错误的。如果用户对于你app的第一个印象是仅仅被请求一个又一个权限,又没有看到你的app的任何直接价值那么很有可能他们会退出并卸载你的应用。最好是最低限度的预先请求上下文中的其他权限。这不仅是帮助用户理解为什么每一个权限是被需要的(因此增加了他们授予权限的可能性),相对于他们费力的做完一堆权限的请求,这么做能使他们在第一次启动应用前更早的感受到你应用的一些价值。

另一个关键点时仅请求你需要的权限。虽然这有时是显而易见的。随着软件的发展,曾经需要的权限有时会超出范围和不是必须的。定期查看你app需要的权限和清除任何多余的权限请求是非常有必要的。

有人可能会疑惑,为什么我没有在例子代码中包含[shouldShowRequestPermissionRationale()](http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#shouldShowRequestPermissionRationale(android.app.Activity, java.lang.String))检测。简单的原因是我认为对于接口实现流程我已经有一个很好的架构更近一步说明了为什么需要请求权限。不管怎样,在当前正文中请求非必需的权限这个机制可能稍微更有作用。

最终需要记住的是,如果用户清空了你app的数据,这不仅仅是清空了所有的数据,还重置了所有的权限。用户再次启动你的app时所有之前授权的权限都会被拒绝。这对于你测试权限申请非常有用,同时为客服提供了应对用户提出“为什么我已经同意了权限还需要重新申请?”问题的准备答案。

总结下我们所看到的Marshmallow权限模型。在下一个系列文章中我们会用到我们这里用到的技术。

本章没有代码,前一章的代码在这里

© 2016, Mark Allison. All rights reserved.

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8