2014-04-25 56 views
3

我嘗試了一種方法,使用偵聽PROVIDERS_CHANGED動作的BroadcastReceiver,但只會告訴我何時打開/關閉位置設置。我想知道位置服務何時被任何應用程序用於獲取位置。我不需要知道哪個應用程序正在執行它,而且我不關心該位置本身。我只是想知道什麼時候一些應用程序試圖獲取一個位置,以及何時停止這樣做。這可能嗎?當GPS(或位置服務)開始/停止時接收通知(通過BroadcastReceiver)

+0

我也有興趣知道這個 – alandalusi

+0

看到這個[link](http://stackoverflow.com/questions/11398732/how-do-i-receive-the-system-broadcast-when-gps-status-has - 更改)..告訴我,如果它幫助... @alandalusi和Xen – Lal

+0

選中此鏈接(http://stackoverflow.com/questions/20673620/how-to-trigger-broadcast-receiver-when-gps-打開關閉)... – Lal

回答

5

我不知道你是否真的需要通過廣播接收通知,但如果它不是絕對必需的,那麼你可以使用GpsStatus.Listener

這裏是如何使用它:

mLocationManager.addGpsStatusListener(new GpsStatus.Listener(){ 

    @Override 
    public void onGpsStatusChanged(int event) { 
     if(event==GpsStatus.GPS_EVENT_STARTED){ 
      Log.d(TAG,"Gps Started"); 
     }else if(event==GpsStatus.GPS_EVENT_STOPPED){ 
      Log.d(TAG,"Gps Stopped"); 
     } 
    } 
}); 

如果你確實需要通過BroadcastReceiver接收這些信息:只需將此代碼包裝在一個服務中,然後從那裏發送事件。

+0

我會測試看看這是否可靠。我必須讓它在我自己的背景下運行,並在必要時重新創建它。 –

+0

工作很好。我在某處讀到,在使用GpsStatus.Listener之前必須開始偵聽位置更新,但事實證明情況並非如此。這實際上工作,我把它包裝在一個粘性的服務,在啓動時重新啓動。謝謝@ ben75 –

+0

這不適合我,我已經把這個放在我的片段的onCreateView() –

4

不完全是你要求的,但可能是有趣的:你可以註冊從PASSIVE_PROVIDERLocationManager的位置更新。

此提供程序可用於在其他應用程序或服務請求它們時被動地接收位置更新,而無需實際請求您自己的位置。

您無法知道其他應用程序何時停止請求新位置,或者何時開始準確的位置,但是當您收到請求時您會知道。