Я использовал метод requestLocationUpdates
внутри Service
в своем приложении для Android для получения обновлений при изменении местоположения моего устройства. Я установил minTime = 0
Но этот метод requestLocationUpdates
дает обновление после очень длительных задержек (от 10 до 15 минут или даже больше). А иногда, когда я запускаю свое приложение, requestLocationUpdates
меход вообще не дает никаких обновлений. И несколько раз (очень редко) этот метод requestLocationUpdates
ведет себя так, как ожидалось (выдает обновления непрерывно с задержкой 0 секунд). Так в чем может быть проблема? И как я могу получать обновления постоянно, каждый раз, когда я запускаю свое приложение?
HelloService.java
public class HelloService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
else {
manager.requestLocationUpdates("gps", 0, 0, new LocationDetector());
Toast.makeText(MainActivity.ctx, "Service Started...", Toast.LENGTH_LONG).show();
}
}
});
}
}).start();
return Service.START_STICKY;
}
}
LocationDetector.java
public class LocationDetector implements LocationListener {
@Override
public void onLocationChanged(Location location) {
/*I have used here Log.e instead of Log.d in order to get the output in clear red message that is easily readable*/
Log.e("GPS: ", location.getLatitude()+ ", " +location.getLongitude(), new Exception());
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
}