如果您的应用需要危险的权限,则每次执行需要该权限的操作时,都必须检查您是否具有该权限。
https://developer.android.com/training/permissions/requesting
(对于API 23及更高版本)
它的意思是:
或其他...
为什么我需要这个答案:
我有一项服务每天不间断地在后台(请求位置)工作多次,比如说每天3次,这是否意味着只要我要进行服务,运行时权限对话框就必须每天显示3次要执行其工作-或-它必须仅在我的服务启动时才显示,然后以编程方式(仅)检查其余2次(是否已授予许可)? (与上面相同的问题在这里进行了修改。)
答案 0 :(得分:2)
这是否意味着每当我的服务要执行其工作时,运行时权限对话框就必须每天显示3次
可能不是。
它必须仅在我的服务启动时才显示,然后以编程方式(仅)检查其余2次(是否已授予许可)?
可能不是。
文档中的报价意味着您在尝试执行需要运行时权限(ContextCompat.checkSelfPermission()
权限)的操作之前需要调用dangerous
。这不会显示任何UI。它只是让您知道您是否持有该许可。
如果您不持有该权限,则您将向用户请求该权限,然后才能执行您尝试执行的操作。 那需要使用requestPermissions()
从活动或片段中执行。
对于您来说,在安排后台工作(WorkManager
,JobScheduler
等)之前,请使用requestPermissions()
,并且只有在用户授予您所需权限的情况下,才能安排工作(s)。
但是,用户有可能撤销所授予的权限。这就是为什么您的背景工作需要致电checkSelfPermission()
。如果那表明您不持有该权限,则需要引发一个Notification
,将用户引导到您的用户界面,您可以在其中再次requestPermissions()
。
答案 1 :(得分:0)
这意味着您需要每次都调用checkSelfPermission,并确保用户没有删除您的权限(因为如果这样做,操作将失败,并返回错误或异常)。但是,如果返回false,则获得许可的唯一方法是显示对话框。否则,您将无法做您打算做的事。