2011-10-12 125 views
10

我通過GPS定期接收位置更新,問題是直到第一次位置更新發生的時間 - 這只是漫長的。當用戶在建築物內時,這個時間會更加糟糕。開始位置策略

因此,我正在尋找一些策略來提高啓動時間(目前我不使用getLastKnownLocation,但我會)。我開始閱讀A Deep Dive Into Location以獲得一些想法,現在我想和你討論一些想法。

上面提到的博客文章首先通過設備上的每個位置提供者並查詢getLastKnownLocation,但只有當它們不老,並且在允許的準確性範圍內時纔會考慮它們。

這裏是我的第一個問題:我希望能夠立即獲得基於網絡的位置,因此我會請求一個新的基於網絡的位置,然後我會從GPS提供商處獲得getLastKnownLocation,並且如果最後一個GPS位置是在由基於點網絡的位置和半徑精度形成的圓圈內,然後我將採取GPS位置,而不管它多大。你怎麼看?

檢查最後已知的位置後我將啓動GPS定位跟蹤,因爲我只需要每2秒以上10μm變化,我會在使用 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);

但是我發現一個規律(演示Being Epic: Best Practices for Android Development內滑動9596,他首先打開粗略和精細的位置(對於時間和距離的變化,爲0,0),然後當接收到第一個事件時,他切換到真正需要的更新頻率。那麼,第一個gps當間隔設置爲0時,更新會更快?

In opp直到這種模式,我會保持粗略的更新,直到收到第一次GPS更新。你怎麼看?

希望得到一些有趣的答案!

----------------更新----------------

我做了一些調查,我打開GPS並等待得到解決。然後我把GPS關掉,開了50公里(31英里)。然後我用A Deep Dive Into Location的代碼得到所有getLastKnownLocation。我試了兩次,第一次用GPS關閉,第二與GPS打開,但沒有修復:

1)GPS關閉我
- 提供商:網絡,正確的位置精度680米
- 提供商:被動(mProvider =網絡),如上述同一地點,同一時間如上
- 提供商:GPS,位置空

所以,我瞭解到,在GPS關閉你沒有getLastKnownLocation

2)帶GPS接通我
- 提供商:網絡,正確的位置精度652米
- 提供商:被動(mProvider =網絡),相同的位置的上方,同時上述
- 提供商: GPS位置,因爲它早些時候2小時,準確度12米,時間也早於2小時

在這裏,我瞭解到,舊消息不會失效,即使很明顯他們錯了。

在這種情況下,算法運行良好,因爲我在關閉GPS的時候移動了。 但是如果我進入房子呢?在這種情況下,2h的GPS結果將非常好,即使它已經過時。

+0

在Google地圖中繪製位置的良好鏈接,包括半徑(精確度):[freemaptools](http://www.freemaptools.com/radius-around-point.htm) – ChrLipp

回答

4

在谷歌IO 2013他們在會議Beyond the Blue Dot: New Features in Android Location一種新的方法顯示,看視頻here

Google的工程師嘗試了很多不同的策略,結果是「Fused位置提供者」。它的質量在視頻中12:17顯示。

Ketan Parmar已發佈blog post如何在示例應用程序中使用融合位置提供程序。

+0

融合位置提供者需要AlarmManager和WakeLock頻繁獲取位置,並防止設備進入睡眠狀態,甚至在應用程序處於後臺時獲取位置信息?或融合做它本身和AlarmManager和WakeLock是在谷歌播放API? –

0

,一旦你得到,你可以切換到您的GPS硬件的響應與被動提供商第一

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, AlarmManager.INTERVAL_FIFTEEN_MINUTES, 75, this); 

啓動位置管理器即可。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);