2013-01-16 174 views
0

我創建了一個應用程序,如果我從最後一個位置移動200米,每10分鐘就會生成一個位置。 它基於網絡和gps提供商。將網絡連接到GPS提供商

我的問題是如果我在相同的地方有很多時間出現錯誤。 我們假設gps提供商生成一個精度爲600的位置,網絡提供商以800的精度生成一個位置。 我的應用程序會選擇GPS提供商,下一次GPS生成位置時,我會通過200無線電,但看起來像網絡位置不斷產生的位置,其中一些可能會更準確,然後我的位置是當我在同一個地方時改變了。

這是一個問題,因爲住在幾個小時的同一個地方會產生我的位置而不是1(這是我正在尋找)的語氣。

我沒有附加代碼,因爲這是更理論化的問題,我猜。

EDIT代碼附着

更新請求:

mLocationManager.requestLocationUpdates(provider, TEN_SECONDS*6*10, TEN_METERS*20, listener); 

的位置之間進行選擇:

if(gpsLocation == null || gpsLocation.getAccuracy() > 1000) 
    { 
     if(!(networkLocation == null || networkLocation.getAccuracy() > 1000)) 
      location = networkLocation; 
    } 
    else 
     if(networkLocation == null) 
     { 
      if(gpsLocation.getAccuracy() < 1000) 
       location = gpsLocation; 
     } 
     else 
      if(gpsLocation.getAccuracy() < networkLocation.getAccuracy() && gpsLocation.getAccuracy() < 500) 
       location = gpsLocation; 
      else 
       if(networkLocation.getAccuracy() < 1000) 
        location = networkLocation; 
    if(location!=null) 
    { 
     Message.obtain(mHandler, 
       UPDATE_LATLNG, 
       location.getLatitude() + ", " + location.getLongitude()).sendToTarget(); 
     if (mGeocoderAvailable) 
      doReverseGeocoding(location); 
    } 

這裏是處理程序:

mHandler = new Handler() 
    { 
     public void handleMessage(Message msg) 
     { 
      if(msg.what == UPDATE_ADDRESS) 
      { 
       LocationService.this.address = (String) msg.obj; 
       new SendLocation(LocationService.this.id,(String)msg.obj); //sends location to the db 
       LocationService.this.gpsLocation = null; 
       LocationService.this.networkLocation = null; 
      } 
     } 
    }; 

回答

0

如果您通過GPS提供商獲取位置信息,它會更加準確,所以如果下次您通過網絡提供商獲取位置信息並且其差異超過500米時,則將其存儲爲值,如果位置小於這個值由網絡提供商給出。如果該位置由GPS商店提供,則爲當前位置。

+0

請檢查我的帖子。 –