На моем устройстве все работает нормально, а другие показывают чудовищные расстояния. Как это должно быть в 300 метрах от точки, и это показывает 6000 кмПоиск моего местоположения и расчет расстояния
вот как я получаю мое местоположение:
private SharedPreferences sPref;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_layout);
sPref=getSharedPreferences(ShareTag, MODE_PRIVATE);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000 * 10, 10, locationListener);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 1000 * 10, 10,
locationListener);
}
private LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Log.d("MyLog", "my lat="+location.getLatitude()+" splash mylong="+location.getLongitude());
saveCoordinates(location);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
//do nothing
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
if (provider.equals(LocationManager.GPS_PROVIDER)) {
//do nothing
} else if (provider.equals(LocationManager.NETWORK_PROVIDER)) {
//do nothing
}
}
};
private void saveCoordinates(Location location){
Log.d("MyLog","get in the save coord");
Editor ed=sPref.edit();
ed.putString("myLatitude", ""+location.getLatitude());
ed.putString("myLongtitude", ""+location.getLongitude());
ed.commit();
}
}
вот как я получаю мои координаты и хранить их
тогда, когда мне нужно получить расстояние
sPref=context.getSharedPreferences(ShareTag, context.MODE_PRIVATE);
myLatitude=Double.parseDouble(sPref.getString("myLatitude", "0"));
myLongtitude=Double.parseDouble(sPref.getString("myLongtitude", "0"));
float[] result = new float[1];
latitude=address.getLatitude();
longtitude=address.getLongitude();
Location.distanceBetween(latitude, longtitude, myLatitude, myLongtitude, result);
Таким образом, результат [0] показывает нереальные цифры. longtitude=address.getLongitude();
и latitude=address.getLatitude();
верны, поэтому проблема связана с myLatitude и myLongtitude. Я не могу посмотреть журналы этих устройств, чтобы увидеть, не ошибаются ли координаты пользователя. У меня GPS работает неправильно (китайское устройство), поэтому я получаю координаты от сетевого провайдера - возможно, именно поэтому они правы.
Что я могу сделать? Любой совет?