Я сделал простое тестовое приложение, настроил местоположение и мониторинг геозоны, используя 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: даже после переустановки приложения оно не делает задержки и не получает события ввода (я также добавил мониторинг для «входа»)