Я использую библиотеку маяков для сканирования маяков с сервисом переднего плана и постоянным уведомлением.Я проверил это на Android 9.0 и 7.0, и приложение работает, как и ожидалось, и отправляет маяки, отсканированные на сервер, каждые 30 секунд.Теперь я пытаюсь добавить сканирование местоположения в приложение, чтобы оно получало обновления местоположения каждые 30 секунд.Я использую Google Play API и настраиваю запрос местоположения с интервалом в 30 секунд.Затем я создал клиента FusedLocationProvider в своем классе приложения, поэтому я дал ему контекст моего приложения (не действия).Затем я передал свой запрос и следующий обратный вызов клиенту:
locationCallback = new LocationCallback()
{
@Override
public void onLocationResult(LocationResult locationResult)
{
if ( locationResult != null )
{
Log.d(TAG, "location acquired: " + locationResult.getLastLocation());
beaconContainer.setLocation(locationResult.getLastLocation());
}
}
};
Объект beaconContainer содержит список маяков и последнее местоположение (и временную метку, когда последнее местоположение было получено с использованием LocalTime.now.()) и отправляет их на сервер каждые 30 секунд.Сначала приложение работает, и временная метка местоположения находится в пределах 30 секунд с момента отправки запроса на сервер.Однако по прошествии некоторого времени (и экран был отключен в течение некоторого времени), создается впечатление, что метод onLocationResult в обратном вызове не вызывается и местоположение не обновляется.Например, запрос к серверу был сделан в 12:34, но местоположение было обновлено в 10:21.Обратите внимание, что сканирование маяка по-прежнему выполняется правильно, как и ожидалось.
Мне было интересно, связано ли это с тем, что телефон, на котором я проверял, был стационарным или потому, что я не использовал службу для обновления местоположения,Мне кажется, что это первое, потому что мое приложение имеет службу переднего плана (ble scanner) и постоянное уведомление, поэтому, согласно документации, оно находится на переднем плане и не должно подвергаться ограничениям фона.Если это последнее, как я могу объединить службу переднего плана библиотеки маяков с моим сканированием местоположения, чтобы они оба работали, как ожидалось.
Спасибо.
РЕДАКТИРОВАТЬ:
Вот скриншот истории аккумулятора, показывающий, как BLE регулярно и последовательно используется, в то время как GPS используется в течение периодических периодов.