簡體   English   中英

棉花糖應用程序權限:android.location.PROVIDERS_CHANGED未觸發

[英]Marshmallow app-permission: android.location.PROVIDERS_CHANGED is not fired

我有一個可收聽android.location.PROVIDERS_CHANGED廣播的應用程序,以了解手機的當前定位功能。

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

到目前為止,我可以使用常規的AlarmManager測試位置訪問權限,但是這很奇怪,而且反應也不靈敏。

是否還有其他特定方法,最好是一種BroadcastReceiver進行注冊,以使我們知道Android M的此位置應用程序許可更改?

抱歉,除非您不知悉某些未記錄的黑客,否則不會直接通知您有關位置或其他權限的權限更改。

如果用戶撤消許可,您的應用程序進程將終止。 這個想法是,當您的應用程序再次運行並調用checkSelfPermission()時,您將了解有關已撤銷權限的信息。 該流程針對常規情況進行了優化,在常規情況下,權限檢查是在用戶打開的活動中進行的。 它不能很好地處理您的情況(不過,恕我直言,位置權限不會像您所描述的那樣影響廣播)。

在N Developer Preview中,您現在可以設置JobScheduler來監視Uri的更改並根據需要觸發您的作業。 這有點像注冊ContentObserver ,除了您不需要一直運行該進程— JobScheduler注冊觀察者並僅在需要時調用JobService 認為已啟用的位置源花名冊可以在“ Settings提供程序的某個位置找到; 如果是這樣,對於Android 6.1 / 7.0 / Turbo System 5000 /無論N變成什么,您都可以使用JobScheduler來查找有關位置源更改的信息,而不必依賴廣播。

但是,這對於Android 6.0並沒有幫助。 您可以使用JobSchedulerAlarmManager或其他方法來查看是否丟失了權限(通過checkSelfPermission() ),但這有點浪費電池壽命(因此,在Doze模式和可能的應用待機狀態下,它們將無法正常工作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM