【发布时间】:2014-01-25 00:05:53
【问题描述】:
当我尝试在 android 中获取设备位置时遇到了一个奇怪的问题。
有时它可以很好地获取当前位置,但有时它会不断返回旧位置。旧的意思是几天前,距离它应该位于的地方几十甚至几百公里。
我不知道我做错了什么,我尝试了几种不同的方法来获取位置,但似乎每种方法都有同样的问题。
最奇怪的是,它并非在所有设备中都会发生……或者至少看起来是这样。三星 S3 和 S4 受影响最大,但在我的 nexus 4 中从未发生过。
这是我的代码,可能你看错了:
public void startSearchingLocation() {
// Define a listener that responds to location updates
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location
// provider.
makeUseOfNewLocation(location);
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
String provider = getProvider();
/*I ignore the passive provider*/
if (provider == null
|| provider.contains(LocationManager.PASSIVE_PROVIDER)) {
this.validProvider = false;
} else {
this.validProvider = true;
}
if (validProvider) {
locationManager.requestLocationUpdates(provider, time, distance,
locationListener);
}
}
protected void makeUseOfNewLocation(Location location) {
JSONObject obj = new JSONObject();
try {
obj.put("latitude", location.getLatitude());
obj.put("longitude", location.getLongitude());
obj.put("provider", location.getProvider());
locationResult = obj;
} catch (Exception e) {
e.printStackTrace();
}
}
public JSONObject getLastKnownLocation() {
if (locationResult != null) {
return locationResult;
} else {
String provider = getProvider();
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
JSONObject obj = new JSONObject();
try {
obj.put("latitude", location.getLatitude());
obj.put("longitude", location.getLongitude());
obj.put("provider", location.getProvider());
return obj;
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
public String getProvider() {
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
String provider = locationManager.getBestProvider(criteria, true);
return provider;
}
谢谢
注意:这不是糟糕的互联网连接。一些用户已经开始抱怨这个问题。而其他使用地理定位的应用程序工作正常。它一定是我的代码中的某些东西,但我不知道是什么。 最奇怪的是,它似乎可以正常运行一两个星期,然后它开始同时在很多用户中发生
【问题讨论】: