2011-12-07 37 views
1

我已經使用GPS製作了一個程序,其經度和緯度大約8英里。我使用GPS的Android程序非常不準確

我認爲這可能是因爲我在裏面,但當我在手機上使用谷歌地圖時,它顯示我在我家。

任何想法,爲什麼這可能是?下面

代碼:

public class Clue extends Activity { 

public static double latitude; 
public static double longitude; 
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.blah); 

    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 

    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    ll = new MyLocationListener()} 

private boolean getLoc() { 
location = getLocation(); 

    longitude = location.getLongitude(); 
    latitude = location.getLatitude(); 
return inCorrectPlace(params); 
} 


    private Location getLocation() { 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 
    return lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
} 
} 

我已經剝離出不相干的代碼,所有的幫助將不勝感激。

+0

也許最後已知的位置已經很老了?你可以檢查時間嗎? – chiuki

回答

3

您正在犯的關鍵錯誤是認爲您可以即時請求準確的位置修復。呼籲getLastKnownLocation()給你一個可能是相當古老的位置。你必須先告訴手機開始嘗試獲取定位。這需要時間,所以您會異步收到位置更新。

您需要做的是致電requestLocationUpdates(),然後在LocationListener類中的onLocationChanged()處理程序中接收更新。位置更新不一定會立即收到。它可能需要幾秒到幾分鐘。

看到Android開發人員指南http://developer.android.com/guide/topics/location/obtaining-user-location.html

2

你不能真的依靠getLastKnownLocation是可靠的。它可能過時,不準確或爲空。

你應該做的是使用requestLocationUpdates積極獲得修復。

至於爲什麼谷歌地圖正在修復您的位置,它可能是使用網絡提供商,而你只是檢查最後的GPS修復。