2013-03-12 133 views
1

我想要製作一個準確的基於位置的應用程序,但我對的工作原理有點困惑。Android位置更新

  1. 如果我把requestlocationUpdates(LocationManager.GPS_PROVIDER, ,);作爲位置提供商,我測試我的應用程序。我看到,如果我沒有啓用gps,它會從網絡獲取更新,並在其啓用時從gps獲取更新。如果網絡和gps提供商自行切換髮送更新,那麼它有什麼意義?

  2. requestlocationUpdates的第三個參數是如何工作的?我的意思是說它改變了我設定的距離,但它如何檢測到我已經移動了?

回答

0

你可以用下面的代碼

Criteria criteria = new Criteria(); 
String provider = locationManager.getBestProvider(criteria, false); 
Location location = locationManager.getLastKnownLocation(provider); 

,其中標準是表示選擇位置提供應用標準一類嘗試。供應商可根據準確性,用電量,報告海拔高度,速度和方位以及貨幣成本的能力進行訂購。

然後

locationManager.requestLocationUpdates(provider,0, 0, new MyLocationListener()); 

其中第二和第三個參數是使用以使你可以控制,你的聽衆接受第二和第三個參數的第二更新的頻率是通知之間的最短時間間隔第三個是通知間距離的最小變化 - 儘可能頻繁地將零請求位置通知設置爲零。

+0

感謝您的回覆,但我的問題是,你寫我的代碼我把它放在onResume方法,所以如果我的標準最好的提供者是GPS,但它是不可用的應用程序將如何選擇網絡提供者自己並在GPS可用時更改。我必須自己檢查一下嗎?至於第二個問題,我的問題是,它如何檢測到我已經超過了我的智力參數?這意味着它計數所有的米? – user2065529 2013-03-12 12:12:16

+0

根據您的第一個問題locationManager.getBestProvider將爲您提供最佳提供商,即gps或網絡。你不必做任何事情。 – 2013-03-12 12:19:53

+0

是的,但如果我的系統選擇了GPS例如,但它變得不可用它會改變到網絡本身? – user2065529 2013-03-12 12:27:41

0
  1. 記住,一旦你requestLocationUpdates(...)表示onLocationChanged(...)時指定供應商啓用將被觸發,你會得到onLocationChanged方法的最新座標。在檢測到任何新位置之前,系統將會使用默認位置(即Cache位置或LastKnownLocation)。

  2. 當然,如果當前位置與您之前的位置(緩存位置)不同,系統會認爲您正在移動。