2011-08-31 81 views
4

我一直在尋找這個答案以前的帖子關於Android的位置提供商,但我找不到答案。如何觸發onLocationChanged,以及自從GPS守護程序/庫修復了一個位置直到它到達LocationManager之後的過程是什麼?它是由Gps守護進程直接觸發還是首先在Android Java Framework中的某處執行?誰在Android的LocationManager中觸發onLocationChanged?

非常感謝

ň

+0

這是一個很好的問題。我正在查看源代碼並試圖弄清楚位置來自哪裏。不過,我迷失在一片界面之中。 – Ian

回答

4

我一直在尋找周圍的代碼,這是我迄今:

requestLocationUpdates註冊onLocationChangeListener。 這又是gets stored作爲hashmap中的一個關鍵字,其值爲ListenerTransport。

ListenerTransport有一個private variable這是有問題的聽衆。 ListenerTransport似乎是一個接收消息的類,它是監聽器的一個類。

這就是我迷失的地方: ListenerTransport延伸ILocationListener.Stubs它擴展了Binder。因此,它是一種RPC調用。但通話去了哪裏?

我注意到ILocationListener.ProxyrequestLocationUpdates(),theres致電IBinder.transact(Stub.TRANSACTION_requestLocationUpdates,...)。這是要看到這發生了什麼,發生了什麼...

+0

謝謝!這真的很有用,所以基本上守護進程/庫通過IBinder使用reportLocation方法 – Narseo

+1

直接與GpsLocationProvider進行通信。雖然我不會肯定地說它是通過reportLocation方法。更可能是通過Listener Transport中的處理程序捕獲的消息(最終)。 但我無法弄清楚是什麼發送此消息開始.. – Ian

1

入住這裏:More about Location in Android

Location Listener in Android

這將幫助你!

+0

嗨!感謝您的迴應,但這不是我正在尋找的。這基本上是從應用程序的角度來看這是如何工作的...我想看看GPS庫/守護程序在哪裏以及如何使用reportLocation(...)向GpsLocationProvider報告新的位置更新。 – Narseo

相關問題