У меня есть приложение для Android, в котором я использовал FusedLocationApi для получения обновлений местоположения пользователя.
Ниже приведен сценарий: 1. У меня есть одноэлементный класс Watcher, в котором я определяю ожидающее намерение получить местоположения, даже когда приложение находится в фоновом режиме. Ниже приведен код:
private PendingIntent pendingIntent;
private Watcher() {
Intent locationIntent = new Intent(context, Receiver.class);
pendingIntent = PendingIntent.getBroadcast(
context, 007 /*requestcode*/, locationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
}
Затем, когда я успешно подключил службы определения местоположения, я запрашиваю обновления местоположения:
LocationServices.FusedLocationApi.
requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
Теперь всякий раз, когда класс Receiver, который расширяет WakefulBroadcastReceiver, получает обновление местоположения, он запускает класс Service. Класс обслуживания расширяет IntentService. Ниже приведен код:
@Override
synchronized protected void onHandleIntent(final Intent intent) {
if(LocationResult.hasResult(intent)) {
LocationResult locationResult= LocationResult.extractResult(intent);
Location location = locationResult.getLastLocation();
printLocation(location);
}
Итак, мой вопрос заключается в том, что, учитывая приведенные выше шаги, почему onHandleIntent пробуждается LocationReceiver несколько раз в течение 5 миллисекунд. Широта, долгота и точность одинаковы. Я определил
setFastestInterval(5 seconds); and
setInterval(1 minute);
Также точность определения местоположения составляет BALANCED_POWER_ACCURACY;
В моем приложении
LocationServices.FusedLocationApi.
requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
do вызывается несколько раз. Но согласно документации: «Любые ранее зарегистрированные запросы с одинаковым PendingIntent (как определено equals (Object)) будут заменены этим запросом». И я использую тот же объект pendingIntent для вызова requestLocationUpdates.
Заранее спасибо.