2011-12-09 42 views
4

我製作了一個Android應用,通過點擊按鈕獲取經緯度位置。Android GPS需要一段時間才能準確

起初,我得到最後一次已知的位置讀數,爲了參數的緣故,當我第一次載入應用程序/開啓GPS時,這是不準確的。

我想知道的是如何等待它是準確的,就像在谷歌地圖上,當你得到敬酒信息'等待位置'時。

如果你看到任何方式的代碼可以改進,它也將是有幫助的。

代碼以供參考:

public class Clue extends Activity { 

    public static double latitude; 
    public static double longitude; 
    Criteria criteria; 
    LocationManager lm; 
    LocationListener ll; 
    Location location; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.questions); 

     criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
     ll = new MyLocationListener(); 
     lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll);   
} 



private boolean weAreThere() { 
    location = getLocation(); 
    longitude = location.getLongitude(); 
    latitude = location.getLatitude(); 

    return inCorrectPlace(param); 
} 

private Location getLocation() { 
    lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll); 
     return lm.getLastKnownLocation(lm.getBestProvider(criteria, true)); 
} 
} 

    public class MyLocationListener implements LocationListener 
    { 
     public void onLocationChanged(Location loc) 
     {   
      Clue.longitude = loc.getLongitude(); 
      Clue.latitude = loc.getLatitude(); 
     } 
} 

感謝您的閱讀,所有答覆將不勝感激。

+0

想也許使用所有的供應商,而不是最好的供應商?它不一定非常準確。 –

回答

4

如果Location.hasAccuracy()返回true,您可以調用Location.getAccuracy()來檢索儀表的精度,然後過濾那些你不考慮不夠準確。

請注意,您並未使用LocationManager.GPS_PROVIDER,因此您的修補程序也可以通過其他方式獲得(如WiFi)。

通常在獲得GPS修正(室外)之前,預計GPS芯片會變得「熱」*一分鐘。

*熱我的意思是有衛星覆蓋。某些芯片組在一段時間後斷開(「冷」)以保存電池。當芯片很冷時,首次定位時間(TTFF)更大。

2

最初,ü應該得到使用getlastknownLocation()

此外修復,U可以使用更新位置的後臺服務使用NETWORK.PROVIDER ......如果明智地使用,但不得漏烏爾電池......而且它還可如果GPS關閉

如果沒有網絡提供商,那麼你應該試着要求用戶打開GPS。

如果妳[R使用2.2嘗試PASSIVE PROVIDER

相關問題