Предыстория: Сейчас я работаю над приложением для Android, чтобы отслеживать транспортные средства, где мне нужно было каждые 10 секунд получать местоположение устройства, как и было принято решением руководства.Мы уже разработали это приложение, которое предоставляет нам обновленное местоположение в соответствии с нашим ожидаемым временным интервалом.
Проблема: Когда автомобили едут по дорогам, приложение выдает нам правильные координаты, как и ожидалосьинтервал времени, но иногда 5-20 минут он обеспечивает те же координаты, но транспортное средство находится в другом месте.
Проверка кода: 1) Мы используем метод с именем getLocation () внутри LocationClass, который предоставляет нам широту и долготу текущего местоположения устройства.
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 5;
private static final long MIN_TIME_BW_UPDATES = 1000*20;
public Location getLocation(Context context) {
Location location=null;
try {
locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(context,"Please! Provide Location Access Permission.....", Toast.LENGTH_LONG).show();
return TODO;
}
// if GPS Enabled get lat/long using GPS Services
if(isGPSEnabled) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
location.setProvider("GPS");
}
}
}
if (isNetworkEnabled && location==null) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
location.setProvider("AGPS");
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
2) Мы повторяем этот метод с использованием таймера службы с именем GPSTracker через фиксированный интервал времени.
public class GPSTracker extends Service implements LocationListener {
private Timer mTimer = null;
private Handler mHandler = new Handler();
Location location;
@Override
public void onCreate() {
super.onCreate();
if (mTimer != null) {
mTimer.cancel();
} else {
// recreate new
mTimer = new Timer();
}
// schedule task
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 10 * 1000, 10 * 1000);
}
class TimeDisplayTimerTask extends TimerTask {
@Override
public void run() {
// run on another thread
mHandler.post(new Runnable() {
@Override
public void run() {
location=new Location("");
LocationCls cls = new LocationCls();
location = cls.getLocation(getBaseContext());
}
});
}
}
}
Я пытаюсь решить эту проблему 2 долгих дня, но пока не нашел ни одной проблемы с кодированием или ее решения.Любое решение или предложение высоко ценится.
Заранее спасибо ....