我想獲取android位置,我有這段代碼,但位置永遠不會返回。我搜索了堆棧溢出。Android位置更新沒有返回
我發現了這個bug:https://code.google.com/p/android/issues/detail?id=57707 但是現在還沒有修復,或者我找不到一個。 這是代碼。任何幫助,將不勝感激
Criteria criteria = new Criteria();
criteria.setCostAllowed(true);
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider = lm.getBestProvider(criteria, true);
Location l = lm.getLastKnownLocation(provider);
final String date = fmtForPresenter.print(dt);
if(l==null) {
lm.requestLocationUpdates(provider, 100, 200,
new android.location.LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Log.e("PROVIDER", "PRO: " + provider);
}
@Override
public void onProviderDisabled(String provider) {
Log.e("PROVIDER", "PRO: " + provider);
}
@Override
public void onLocationChanged(final Location location) {
lat = location.getLatitude();
lng = location.getLongitude();
presenter.getFoot(userProfile.getToken(),"public",lat,lng,date);
if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED)) {
lm.removeUpdates(this);
}
}
});
}
else {
lat = l.getLatitude();
lng = l.getLongitude();
presenter.getFoot(userProfile.getToken(),"public",lat,lng,date);
}
編輯:
如果我重新啓動手機位置再次工作,但我不把這個作爲一個解決方案,因爲我不能告訴我所有的客戶重新啓動其手機每次有是一個問題
這是一種非常受歡迎的「反模式」,通常以「GPSTracker」的名稱命名。其中的主要問題是代碼請求位置更新,但並未真正使用它們。 'onLocationChanged()'中沒有任何東西。如果設備碰巧知道它的位置,這可能只適用於第一次通話。有一篇關於這類代碼問題的[Gabe Sechan博客文章](http://gabesechansoftware.com/location-tracking/)。 –
是的,但如果我將我的代碼添加到onLocationChanged然後它將正常工作,然後我刪除更新,因爲我在我的代碼中執行。 –
@MarkusKauppinen你是對的,但是這段代碼是一次獲取位置,如果你想要更新,你可以使用onLocationChanged(),我不需要它,這就是爲什麼.. – ThePunisher