2016-03-11 39 views
0

我有一個應用程序,它偵聽android.location.PROVIDERS_CHANGED廣播,以便了解手機的當前位置功能。棉花糖應用程序權限:android.location.PROVIDERS_CHANGED不會被解僱

使用Android M和新的應用程序運行時權限,當系統/常規面板更改位置時,它正常工作。但是,如果用戶專門禁用該應用的位置權限,則不會觸發相同的廣播。

到目前爲止,我可以使用常規AlarmManager測試位置訪問權限,但它很奇怪,並且響應性也不是很高。

有沒有其他的具體方法,理想情況下是一種BroadcastReceiver來註冊,讓我們知道這個位置app-permission-change與Android M?

+0

試試這可能是工作http://stackoverflow.com/a/41221852/5488468 –

回答

2

很抱歉,您並未直接獲得有關權限更改,位置或其他權限的通知,除非有一些我沒有意識到的無證黑客。

如果用戶撤銷權限,應用程序的進程將被終止。這個想法是,當你的應用程序再次運行時,你會發現撤銷的權限,你可以撥打checkSelfPermission()。該流程針對更傳統的情況進行了優化,其中權限檢查是在用戶打開的活動中進行的。它不能很好地處理你的情況(雖然,恕我直言,位置權限不應該如你所描述的那樣影響廣播)。

在N Developer Preview中,您現在可以設置JobScheduler來監視Uri的更改並根據需要觸發您的作業。這有點像註冊一個ContentObserver,除了你不需要一直運行的進程— JobScheduler註冊觀察者,並根據需要調用你的JobService。我想認爲在某個地方可以找到啓用的位置來源的名單在Settings提供商;如果是這樣的話,對於Android 6.1/7.0/Turbo System 5000 /無論哪個N轉入,您可以使用JobScheduler來查找位置源更改,而不是依賴廣播。

儘管如此,這並不能幫助你。您可以使用JobSchedulerAlarmManager或其他東西來查看您是否失去了許可權(通過checkSelfPermission()),但這對電池壽命有點浪費(因此在打盹模式和可能的應用程序待機狀態下不能正常工作)。

+1

謝謝你的澄清 – JBA