《Training:Permissions Usage Notes》

来源:互联网 发布:java读取excel 编辑:程序博客网 时间:2024/06/05 23:55

注:本人非专业翻译人员,编写此博客只是为了自学使用,如有疑问,请参考官方文档。


一个应用程序很容易淹没拥有权限请求的用户。 如果用户发现应用程序令人沮丧,或者用户担心应用程序可能在使用该用户的信息,那么用户可能会避免使用该应用程序或将其完全卸载。 以下最佳做法可以帮助您避免这样糟糕的用户体验。



一、考虑使用意图

在许多情况下,您可以通过两种方式为应用程序执行任务。一种是你可以让你的应用程序申请权限来执行操作。另一种是您可以让应用程式使用其他应用程式执行任务。


例如,假设您的应用程序需要能够使用设备摄像头拍照。 您的应用程序可以请求CAMERA权限,允许您的应用直接访问相机。 然后,您的应用程序将使用相机API来控制相机并拍摄照片。 这种方法可以让您的应用程序完全控制摄影过程,并且可以将摄像头UI整合到你的应用程序中。


但是,如果您不需要这样的完全控制,可以使用ACTION_IMAGE_CAPTURE意图来请求映像。 当您发送意图时,系统提示用户选择相机应用程序(如果还没有默认的相机应用程序)。 用户使用所选的相机应用拍摄照片,该应用程序会将照片返回到您的应用程序的onActivityResult()方法。


同样,如果您需要打电话,访问用户的联系人等等,您可以通过创建适当的意图来做到这一点,或者您可以请求权限并直接访问相应的对象。 每种方法都有优缺点。


如果您使用权限:

1、执行操作时,您的应用程序可以完全控制用户体验。 但是,由于您需要设计合适的UI,因此广泛的控制会增加您的任务的复杂性。

2、系统会提示用户在运行时或安装时给予权限(具体取决于用户的Android版本)。 之后,您的应用程序可以执行操作,而不需要用户的额外交互。 但是,如果用户未授予权限(或稍后撤销),则您的应用程序将无法根本完成该操作。


如果您使用意图:

1、您不必为操作设计UI。 处理意图的应用程序提供了UI。 但是,这意味着您无法控制用户体验。 用户可以与您从未见过的应用互动。

2、如果用户没有该操作的默认应用程序,系统会提示用户选择一个应用程序。 如果用户没有指定默认处理程序,则每次执行操作时可能需要经过一个额外的对话框。



二、只请求你需要的权限

每次您要求许可时,强制用户作出决定。 您应该尽量减少进行这些请求的次数。 如果用户运行Android 6.0(API级别23)或更高版本,每次用户尝试一些需要许可的新应用程序功能时,应用程序必须通过权限请求中断用户的工作。 如果用户正在运行较早版本的Android,则用户必须在安装应用时授予每个应用的权限; 如果列表太长或看起来不合适,用户可能会决定不安装您的应用程序。 由于这些原因,您应该尽可能减少应用程序所需的权限数量。


您的应用程序通常可以避免通过使用意图来请求许可。 如果功能不是应用功能的核心部分,那么您应该考虑将工作交给另一个应用程序,如“使用意图”一节中所述。



三、不要压倒用户

如果用户正在运行Android 6.0(API级别23)或更高版本,则用户必须在运行应用程序时授予应用程序的权限。 如果您一次面对用户许可的许可请求,您可能会淹没用户,并导致他们退出您的应用程序。 相反,您应该在需要时请求权限。


在某些情况下,一个或多个权限对您的应用程序来说绝对必不可少。 一旦应用启动,请求所有这些权限可能是有意义的。 例如,如果您制作摄影应用程序,该应用程序将需要访问设备摄像头。 当用户第一次启动应用程序时,他们将不会惊讶地被要求允许使用相机。 但是,如果同一应用程序还具有与用户的联系人共享照片的功能,则可能不要在首次启动时要求READ_CONTACTS权限。 而是等到用户尝试使用“共享”功能,然后再请求许可。


如果您的应用程序提供了一个手册,在手册序列结尾处请求应用程序的基本权限可能是有意义的。



四、解释为什么你需要权限

当您调用requestPermissions()时,系统显示的权限对话框显示您的应用程序需要什么权限,但不能说明为什么。 在某些情况下,用户可能会发现困惑。 向用户解释您的应用程序在调用requestPermissions()之前需要权限的好主意。


例如,摄影应用程序可能想要使用位置服务,因此可以对照片进行地理标记。 一个典型的用户可能不明白照片可能包含位置信息,并且会让他们的摄影应用程序想要知道位置的原因感到困惑。 所以在这种情况下,应用程序在调用requestPermissions()之前告诉用户这个功能是个好主意。


通知用户的一种方法是将这些请求合并到应用程序教程中。 本教程可以依次显示每个应用程序的功能,因此可以解释需要哪些权限。 例如,摄影应用程序的教程可以展示其“与您的联系人分享照片”功能,然后告诉用户他们需要授权该应用来查看用户的联系人。 然后,应用程序可以调用requestPermissions()来询问用户的访问权限。 当然,并不是每个用户都将遵循本教程,因此您仍然需要在应用程序正常运行期间检查并请求权限。



五、测试两个权限模型

从Android 6.0(API级别23)开始,用户在运行时授予和撤消应用程序权限,而不是在安装应用程序时执行此操作。 因此,您必须在更广泛的条件下测试您的应用程序。 在Android 6.0之前,您可以合理地假设,如果您的应用程序正在运行,则它具有在应用程序清单中声明的所有权限。 在新的权限模型下,您将无法再做出这样的假设。


以下提示将帮助您识别运行API级别23或更高版本的设备上与权限相关的代码问题:

1、确定有的应用程序的当前权限和相关的代码路径。


2、测试用户流经受权限保护的服务和数据。


3、用许可或撤销权限的各种组合进行测试。 例如,相机应用程序可能会在其清单中列出CAMERA,READ_CONTACTS和ACCESS_FINE_LOCATION。 您应该测试应用程序,其中的每个权限都打开和关闭,以确保该应用程序可以正常处理所有权限配置。 请记住,从Android 6.0开始,用户可以为任何应用启用或禁用权限,即使是针对API级别22或更低的应用。


4、使用adb工具从命令行管理权限:

 1)、按组列出权限和状态:

$ adb shell pm list permissions -d -g
 2)、授予或撤销一个或多个权限:

$ adb shell pm [grant|revoke] <permission-name> ...

5、分析您的应用程序使用权限的服务。

0 0
原创粉丝点击