每次检查危险的权限

时间:2018-11-11 16:35:37

标签: android

  

如果您的应用需要危险的权限,则每次执行需要该权限的操作时,都必须检查您是否具有该权限。

https://developer.android.com/training/permissions/requesting
(对于API 23及更高版本)

它的意思是:

  1. 每次要执行授予许可的操作时,都会弹出许可对话框。
  2. 如果已授予权限,则只需(以编程方式)访问ContextCompat.checkSelfPermission(),如果是,则不会弹出任何权限对话框。

或其他...

为什么我需要这个答案:

我有一项服务每天不间断地在后台(请求位置)工作多次,比如说每天3次,这是否意味着只要我要进行服务,运行时权限对话框就必须每天显示3次要执行其工作-或-它必须仅在我的服务启动时才显示,然后以编程方式(仅)检查其余2次(是否已授予许可)? (与上面相同的问题在这里进行了修改。)

2 个答案:

答案 0 :(得分:2)

  

这是否意味着每当我的服务要执行其工作时,运行时权限对话框就必须每天显示3次

可能不是。

  

它必须仅在我的服务启动时才显示,然后以编程方式(仅)检查其余2次(是否已授予许可)?

可能不是。

文档中的报价意味着您在尝试执行需要运行时权限(ContextCompat.checkSelfPermission()权限)的操作之前需要调用dangerous。这不会显示任何UI。它只是让您知道您是否持有该许可。

如果您不持有该权限,则您将向用户请求该权限,然后才能执行您尝试执行的操作。 需要使用requestPermissions()从活动或片段中执行。

对于您来说,在安排后台工作(WorkManagerJobScheduler等)之前,请使用requestPermissions(),并且只有在用户授予您所需权限的情况下,才能安排工作(s)。

但是,用户有可能撤销所授予的权限。这就是为什么您的背景工作需要致电checkSelfPermission()。如果那表明您不持有该权限,则需要引发一个Notification,将用户引导到您的用户界面,您可以在其中再次requestPermissions()

答案 1 :(得分:0)

这意味着您需要每次都调用checkSelfPermission,并确保用户没有删除您的权限(因为如果这样做,操作将失败,并返回错误或异常)。但是,如果返回false,则获得许可的唯一方法是显示对话框。否则,您将无法做您打算做的事。