2011-03-10 66 views
5

Android中獲取位置提供者狀態的最佳方式是什麼?在註冊LocationListener進行位置更新時,只要狀態發生更改,就會調用onStatusChanged(String provider, int status, Bundle extras)回調。但是,我沒有找到獲取當前狀態(AVAILABLEOUT_OF_SERVICETEMPORARILY_UNAVAILABLE)而不註冊位置更新的方法。 isProviderEnabled方法只是表明提供者通常是否打開(在設備的設置中),因此可能會返回true,但提供者已停止服務......是否有另一種方法來執行此操作?Android位置API:獲取提供者狀態

另一個問題:是否可以在不註冊位置更新的情況下偵聽狀態更新?我想聽一個具體的提供商的位置,但同時檢查是否有其他人可用。我目前的解決方法是將最小時間和距離設置爲非常高的值,但我不知道是否有更好的解決方案...

謝謝任何​​提示!

順便說一句:如果可能的話,解決方案應與Android 1.1

+0

我不知道如何去做你想要的。但是你可以得到最後一個已知位置('LocationManager.getLastKnownLocation')並查看它是否是最近的。如果提供者可用或不可用,這會給你一個估計。 –

回答

2

工作你爲什麼要GPS狀態,如果你不感興趣的位置?

但是,你可以得到的GPS狀態至少某些方面是這樣的:

final GpsStatus gs = this.locationManager.getGpsStatus(null); 
int i = 0; 
final Iterator<GpsSatellite> it = gs.getSatellites().iterator(); 
while(it.hasNext()) { 
    it.next(); 
    i += 1; 
} 
this.gpsSatsAvailable = i; 

http://developer.android.com/reference/android/location/GpsStatus.html 你將需要至少4顆衛星的準確2D修復和5的3D定位點(包括高度)。 根據文檔,您應該從onStatusChanged()訪問狀態以獲取一致的信息。它也可以在此方法之外使用。鏈接的文檔解釋了可能發生的問題。 當然,您仍然需要偵聽位置更新,因爲GPS狀態不會更新。

+0

爲什麼?在我的情況下,因爲我正在開發一個技術應用程序,顯示各種板載和藍牙連接的傳感器的狀態屏幕,因此只顯示初始值是有意義的。更具哲學意義的是,如果「地位」足夠重要以適應自己的變更處理程序,那麼肯定能夠查詢其當前值是非常重要的? – GISmatters

+0

你有一個點。 – Stefan

相關問題