我在我的應用程序中使用了以下代碼(從教程等),以便從GPS獲得最佳位置修復(或者,如果GPS不在網絡中),然後將其顯示在文本字段中。Android請求位置更新不穩定
crit = new Criteria();
context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(context);
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);
crit.setAltitudeRequired(false);
crit.setBearingRequired(false);
crit.setSpeedRequired(false);
crit.setCostAllowed(false);
try {
bestProvider = locationManager.getBestProvider(crit, true);
loc = locationManager.getLastKnownLocation(bestProvider);
locationManager.requestLocationUpdates(bestProvider, 0, 0,
new GeoUpdateHandler());
} catch (java.lang.RuntimeException run) {
Toast.makeText(getBaseContext(),
"Waiting for location fix...", Toast.LENGTH_SHORT).show();
}
我的問題是在位置之間移動。我開始在諾福克使用我的應用程序,並確定位置。第二天,我在康沃爾郡(距離100英里),當我切換我的應用程序(它應該已被Android關閉/銷燬)時,它仍然顯示我諾福克的位置。我發現,如果我然後退出我的應用程序並重新啓動它,它會提取新的位置。我可以輕鬆做到這一點,但我的用戶覺得這是一個真正的痛苦。
我的假設是,如果GPS /網絡可用,那麼我啓動應用程序,組委會從最後已知位置創建,然後的LocationManager使用即時更新(這應該立即更新LOC):
public class GeoUpdateHandler implements LocationListener {
public void onLocationChanged(Location location) {
loc = location;
}
public void onProviderDisabled(String provider) { }
public void onProviderEnabled(String provider) { }
public void onStatusChanged(String provider, int status, Bundle extras) { }
}
顯然這個更新沒有發生。
任何人都可以告訴我,如果我的代碼是愚蠢的,或建議更好的方式,以確保我總是處理當前的位置?謝謝。道歉,如果這是回答,很難找到位置& requestLocationUpdates標籤上的所有帖子。
您絕對肯定知道您的應用實際上在移動位置後重新啓動?你可以檢查logcat確定。此外,獲取GPS定位可能需要一些時間。除非有另一個應用程序頻繁地針對GPS更新進行輪詢,否則您將無法立即獲得更新。 –
David-I認爲該應用程序已關閉,因爲它自上次使用以來已超過24小時。我沒有檢查logcat,因爲這是在現場電話上,這比我習慣的更加煩瑣。您對即時投票和更新的評論聽起來很正確,但我想知道是否有任何方式通知用戶,以便他們不會使用錯誤的位置,並且可以儘快得到更新? – iaindownie
這有點困難,因爲有很多變量和條件等等。你可以嘗試的一件事是用'Location.getTime()'檢查你的位置的時間戳,看看它是否是「陳舊」。這可能對基於GPS的位置有幫助(我知道它對基於網絡的位置沒有幫助) –