2017-04-01 34 views
1

我正在實施使用LocationManager獲取和使用平板電腦位置的服務。這項服務是從一項活動開始並停止。如何向服務請求權限

最新的Android需要在運行時請求權限。現在我已經成功地在,checkSelfPermission中使用requestPermission,我每次使用某個位置管理器功能並添加requestPermission函數並覆蓋onRequestPermissionResult

它很好用。

現在爲我的服務我需要做同樣的事情,但這些功能似乎只適用於活動。 如何激活服​​務中的權限?


以防萬一,我已經要求在啓動和服務停止服務

回答

1

如何激活服​​務中的權限?

你不知道。您激活(即請求)活動的權限。這是不可協商的。

理想情況下,您在活動啓動服務之前請求權限,或者做一些最終會導致服務啓動的內容(例如,使用JobScheduler安排該作業)。

如果您確定您的服務不再具有所需的權限—也許用戶撤銷他們—你可以提出一個Notification,導致用戶在您重新請求一個活動的權限設置。

服務啓動請求權限的活動在技術上是可行的。通常情況下,這不是一個好主意,因爲您可能不知道用戶當時正在做什麼,並且用戶可能不滿意您是否因使用此權限請求而中斷用戶。

+0

我完全同意這一點。我的應用程序實際上具有活動結構 - 它成功詢問來回權限 - 以後啓動服務。現在*我如何*將這些權限轉移到服務? (理想情況下,即使在關閉活動後,我也希望該服務能夠運行) – KansaiRobot

+1

@KansaiRobot:「現在如何將這些權限轉移到服務?」 - 沒有什麼可以「轉移」。只需在獲得運行時權限後啓動或綁定到您的服務。 – CommonsWare

1

如何激活權限的活動權限?

您無法從服務請求權限。應該明確詢問應該在用戶界面中對用戶可見的權限。但是,您可以請求活動的許可,如果成功,您可以訪問這些資源,直到用戶再次關閉您的應用的權限。

如何將這些權限「轉移」到服務中?

權限被分配給整個應用程序,所以你不需要把它從一個活動轉移到另一個或從一個活動服務。一旦您在活動中獲得權限,該權限將被分配給整個應用程序,並且您的服務可以在之後訪問資源。歡呼聲:)

+0

好的,我可以理解。如果有的話,我的應用程序的結構已準備就緒(活動已獲得權限並啓動服務)。問題是*如何*你能將這些權限「轉移」給服務嗎? – KansaiRobot