我想获取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