Событие задержки геозоны никогда не поступало при добавлении геозоны с устройством в радиусе

Я сделал простое тестовое приложение, настроил местоположение и мониторинг геозоны, используя LocationServices.getFusedLocationProviderClient и LocationServices.getGeofencingClient.

Я добавил геозону, используя только уведомление о переходе и начальный триггер, с правильным положением и радиусом, так что я ожидал события «задержки» очень скоро после добавления геозоны:

geofenceBuilder.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL);
...
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);

В журнале устройства я заметил несколько из этих двух, каждый раз, когда была получена позиция:

введите здесь описание изображения

Намерение ожидания геозоны никогда не срабатывало. Аппарат стоял у меня на столе.

Я не понимал, что происходит. Я даже пытался переключиться на Google Maps и снова переключиться на приложение, оно ничего не дало. Устройство явно не находится в глубоком сне с тех пор, как я его использую. Так что же в глубоком сне? Я предполагаю, что какой-то компонент геозоны в сервисах Google Play? Но местоположение постоянно запрашивается приложением, так почему геозона Служб Google Play не видит, что я нахожусь внутри местоположения, и не отправляет событие «задержаться»?

После того, как я перемещался по дому с устройством, две записи в журнале больше не появлялись, и я получил событие пребывания в геозоне!

Мой вывод таков: если компонент «устройство\Android» находится в этом «спящем» режиме при установке геозоны, я не думаю, что события геозоны не будут срабатывать, по крайней мере, не «задержка» согласно моим тестам, поскольку Я пишу это, я не проверял, вызывается ли 'enter'.

Что это за «режим глубокого сна» и «GeofencerStateMachine»? Это из сервисов Android Google Play? Как это работает? По какой причине я не получил событие 'dwell'?

На другом устройстве (Samsung Galaxy) я вижу такое же поведение, событие задержки не получено, но нет аналогичной записи в журнале с «глубоким сном», и перемещение устройства не приводит к тому, что оно получает событие «задержка». ..…

Я регистрирую координаты устройства, и я ясно вижу, что точность составляет около 10, но событие задержки не отправляется.

Обновление: я оставил устройство на столе примерно на 40 минут. Вернулся, открыл приложение, запустил геозону, и снова событие задержки не получено, и теперь нет даже события журнала, говорящего: «Местоположение потеряно, потому что в режиме глубокой неподвижности» ... Я потерялся ...

Обновление 2: даже после переустановки приложения оно не делает задержки и не получает события ввода (я также добавил мониторинг для «входа»)


person Don Box    schedule 12.05.2018    source источник
comment
Вы поняли, что это за глубокий неподвижный режим? То же самое происходит со мной   -  person Caique    schedule 14.08.2018
comment
Неа. API попал и пропал, и вы делаете некоторые выводы, которые могут быть очень неправильными.   -  person Don Box    schedule 14.08.2018


Ответы (1)


Примечание. Событие Dwell происходит только в том случае, если вы еще не находитесь внутри геозоны во время регистрации. Оно сработает, если вы войдете в геозону после регистрации.

Вы также можете попробовать использовать поддельный GPS, чтобы проверить это и продолжать менять местоположение, у меня все время работало.

Я пробовал следующие решения, и оба работали на меня.

1-е решение такое же, как и в вашем случае, так как вы хотите иметь только событие задержки.


builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);

builder.setLoiteringDelay(500);
you also have to add this method(time in millis)

Второе решение для тех, кто хотел бы иметь все три события «ENTER», «DWELL» и «EXIT».

следуйте фрагменту кода

// Register your initial trigger with both 'ENTER' & 'DWELL' events
.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER | GeofencingRequest.INITIAL_TRIGGER_DWELL);

//and then set transition types for all three events

.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_DWELL |
 Geofence.GEOFENCE_TRANSITION_EXIT);


//dont forget to add the setLoiteringDelay, in millis

.setLoiteringDelay(5000);

Надеюсь, это будет и для вас, ребята. Я могу предоставить полное рабочее решение, если кому-то это нужно, пожалуйста, прокомментируйте.

person Kamil    schedule 22.01.2020