2017-04-01 75 views
1

我正在实施使用LocationManager获取和使用平板电脑位置的服务。这项服务是从一项活动开始并停止。如何向服务请求权限

最新的Android需要在运行时请求权限。现在我已经成功地在,checkSelfPermission中使用requestPermission,我每次使用某个位置管理器功能并添加requestPermission函数并覆盖onRequestPermissionResult

它很好用。

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


以防万一,我已经要求在启动和服务停止服务

回答

1

如何激活服​​务中的权限?

你不知道。您激活(即请求)活动的权限。这是不可协商的。

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

如果您确定您的服务不再具有所需的权限—也许用户撤销他们—你可以提出一个Notification,导致用户在您重新请求一个活动的权限设置。

服务启动请求权限的活动在技术上是可行的。通常情况下,这不是一个好主意,因为您可能不知道用户当时正在做什么,并且用户可能不满意您是否因使用此权限请求而中断用户。

+0

我完全同意这一点。我的应用程序实际上具有活动结构 - 它成功询问来回权限 - 以后启动服务。现在*我如何*将这些权限转移到服务? (理想情况下,即使在关闭活动后,我也希望该服务能够运行) – KansaiRobot

+1

@KansaiRobot:“现在如何将这些权限转移到服务?” - 没有什么可以“转移”。只需在获得运行时权限后启动或绑定到您的服务。 – CommonsWare

1

如何激活权限的活动权限?

您无法从服务请求权限。应该明确询问应该在用户界面中对用户可见的权限。但是,您可以请求活动的许可,如果成功,您可以访问这些资源,直到用户再次关闭您的应用的权限。

如何将这些权限“转移”到服务中?

权限被分配给整个应用程序,所以你不需要把它从一个活动转移到另一个或从一个活动服务。一旦您在活动中获得权限,该权限将被分配给整个应用程序,并且您的服务可以在之后访问资源。欢呼声:)

+0

好的,我可以理解。如果有的话,我的应用程序的结构已准备就绪(活动已获得权限并启动服务)。问题是*如何*你能将这些权限“转移”给服务吗? – KansaiRobot