Im пытается сделать приложение для отслеживания.Googlemap показывает неправильное местоположение
Проблема в том, что местоположение, которое я получаю от gps locationlistner, истинно, но местоположение, отображаемое в googlemap, неверно по крайней мере на 20 м. Это показано на рисунке ниже, красная линия берется из первого знакового местоположения в обновленное местоположение через 10 секунд. Поэтому, чтобы быть понятным, я получил почти идеальное местоположение после 10 секунд, но все же синий значок не меняет его. (Примечание, она будет увеличена до макс)
Код:
public class LocationHandler{
//Location handlers
private LocationManager locationManager = null;
//Keep track of current location
private LatLng currentLatLng = null;
private Location currentLocation = null;
//Bools
private Boolean gpsLock = false;
private Boolean gpsEnable = false;
public LocationHandler(Activity activity) {
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity);
// Showing status
if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, activity, requestCode);
dialog.show();
}else {
// Getting LocationManager object from System Service LOCATION_SERVICE
locationManager = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE);
// Check type of location service
if(locationManager != null){
try{gpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
if(gpsEnable){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, gpsLocationListener);
}
}
}
}
public void stopLocationUpdates() {
if(gpsLocationListener != null){
locationManager.removeUpdates(gpsLocationListener);
}
}
/**
* @return the currentLocation
*/
public Location getCurrentLocation() {
return currentLocation;
}
/**
* @return the latLng
*/
public LatLng getCurrentLatLng() {
return currentLatLng;
}
/**
* @return the gpsLock
*/
public Boolean getGpsLock() {
return gpsLock;
}
public void setLatLng(Location location){
if(location.getAccuracy() < 50){
double latitude = location.getLatitude();
// Getting longitude of the current location
double longitude = location.getLongitude();
// Creating a LatLng object for the current location
currentLatLng = new LatLng(latitude, longitude);
currentLocation = location;
}
}
private LocationListener gpsLocationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras){}
public void onProviderEnabled(String provider){}
public void onProviderDisabled(String provider){}
@Override
public void onLocationChanged(Location location) {
gpsLock = true;
setLatLng(location);
}
};
}
Неплохо, сейчас. :) –