如何向服务请求权限

How to ask permissions from a Service

我正在实施一项服务,该服务使用 LocationManager 来获取和利用平板电脑的位置。此服务从 activity 开始和停止。

最新的 Android 要求在运行时请求权限。现在我已经设法通过在 onCreate 中使用 requestPermission 在 activity 上做到这一点,每次我使用一些位置管理器功能时 checkSelfPermission,并添加 requestPermission 功能并覆盖 onRequestPermissionResult

效果很好。

现在对于我的服务,我需要做同样的事情,但这些功能似乎只适用于活动。 如何在服务中激活权限?


以防万一,我已经在 activity 中请求了启动和停止服务的权限

How can I activate permissions in a Service?

您不能向服务请求权限。在 UI 中,应该明确询问哪些权限应该对用户可见。但是,您可以请求 activity 的许可,如果成功,您可以访问这些资源,直到用户再次关闭对您应用的许可。

how can you "transfer" these permissions to the service?

权限已分配给整个应用程序,因此您无需将其从一个 activity 转移到另一个或从一个 activity 转移到服务。在 Activity 中获得权限后,该权限将分配给整个应用程序,之后您的服务就可以访问资源。干杯:)

How can I activate permissions in a Service?

你不知道。您从 activity 激活(即请求)权限。那是没有商量余地的。

理想情况下,您在 activity 启动服务之前请求权限,或者做一些最终会导致服务启动的事情(例如,使用 JobScheduler 安排作业)。

如果您确定您的服务不再具有必要的权限——可能是用户从“设置”中撤销了这些权限——您可以提出 Notification 引导用户进入 activity请求权限。

从技术上讲,服务可以启动请求权限的 activity。通常,这不是一个好主意,因为您可能不知道用户当时在做什么,并且用户可能不高兴您用此权限请求打断他们。