2015-08-23 112 views
1

某些資源說getLastKnownLocation()僅給出了某個以前應用的位置更改偵聽器的位置。定位服務getLastKnownLocation()檢查手機當前的GPS位置嗎?

但我覺得在對話中缺少一件事 - 如果手機啓用了GPS,那麼隨着手機的移動,是不是GPS跟蹤/更新?所以如果我打電話給getLastKnownLocation(),是不是從手機的不斷更新的GPS獲取當前的GPS?

如果是這樣,那麼爲什麼人們警告不要使用它/指責它有可能獲得「陳舊」的位置?如果正在跟蹤/更新GPS,並且getLastKnownLocation()一次性抓取當前位置,是什麼使得getLastKnownLocation()不好?

我誤解了Locations服務或GPS?

回答

2

documentation說:Returns a Location indicating the data from the last known location fix obtained from the given provider.

此外,關於「過時的位置」:This can be done without starting the provider. Note that this location could be out-of-date, for example if the device was turned off and moved to another location.(「這」指的是獲得最後已知的位置)。

此外,從LocationProvider docs採取: Each provider has a set of criteria under which it may be used; for example, some providers require GPS hardware and visibility to a number of satellites; others require the use of the cellular radio, or access to a specific carrier's network, or to the internet. They may also have different battery consumption characteristics or monetary costs to the user.

如果手機有GPS功能,是不是該GPS跟蹤/更新的手機動作?

嗯,它是,但不是不斷。這與電池消耗有關,如果手機不斷更新GPS位置,電池壽命將受到很大影響。 GPS位置通常在一些應用程序請求時更新。但即使這樣的要求也不能保證成功。例如,假設你進入隧道。一些應用程序請求在進入隧道之前更新GPS座標並且成功。現在,你已經進入了5公里長的隧道。很可能您的設備將無法從隧道獲得GPS定位,因此在接下來的5km(至少)getLastKnownLocation()將返回過期值,,因爲設備的最後一個已知位置位於隧道的入口處。

你可以做的是明確要求更新GPS位置,但這可能需要一些時間,並且不能保證它會成功。

+0

'GPS位置通常在某些應用程序請求時更新 - 'getLastKnownLocation()'不請求它,從而告訴它更新?那麼如何/何時會更新? – mmcrae

+0

Android教程中的替代方案是實現'LocationListener' - 但所有這些都會在GPS更新時回調 - 它本身不會更新GPS。那麼如何使用'LocationListener'(唯一提到的獲取GPS的其他選項)比調用'getLastKnownLocation()'更好?這些文檔似乎並沒有實際更新GPS - 「getLastKnown」只是抓取了最後一次GPS讀取的內容,而「LocationListener」爲您提供了一種在GPS更新時被告知的方法。順便說一句,我很感謝你幫助我的時間。 – mmcrae

+0

'getLastKnownLocation()'只是獲取最後一個已知位置,它不更新它。它會在某些應用程序顯示「Hey Android,請更新GPS位置」時得到更新。當一些應用程序調用'getLastKnownLocation()'時,它基本上是這樣說的:「嘿,Android,請告訴我最近的已知位置是什麼?」,它並沒有要求更新位置。 「最近的已知位置」存儲在Android操作系統的某處。 –

1

你有這樣的假設:「如果手機已啓用GPS,不是隨着手機移動而進行此GPS跟蹤/更新」。這個假設是不正確的。 GPS功能需要很長的電池使用時間,所以應該謹慎使用,幾乎可以肯定不是全部使用。

+0

我正在考慮實施'LocationListener'和檢查更新之間的區別,只是調用'getLastKnownLocation()'。糾正我,如果我錯了:'getLastKnownLocation()'只抓住任何GPS當前認爲的位置,而實現'LocationListener'使得它可以在GPS獲得新的位置讀數時提醒(覆蓋方法+聆聽)。但是他們自己的選擇都沒有告訴GPS更新 - 他們都只能通過讀取GPS給他們的信息來工作,第一個是按需提供,另一個是任何改變的提醒。一切正確嗎? – mmcrae

+0

「getLastKnownLocation()只是抓住GPS當前認爲位置i」不正確。只有當'LocationProvider'碰巧正在運行或者是最後一次運行時它纔會獲得最後的位置。我認爲@ILUXONCHIK在解釋更多關於提供商方面做得很好。 – Victory