Android 10 блокирует сетевые запросы и вызовы GPS при выключенном экране - PullRequest
1 голос
/ 01 апреля 2020

Я сделал приложение, которое фактически отправляет местоположение пользователя на сервер каждые 15 минут. При этом используется Alarm Manager (один выстрел), который запускает следующий. Диспетчер аварийных сигналов запускает службу переднего плана, которая отвечает за выборку местоположения пользователя и загрузку на мой сервер.

Поток работает потрясающе, когда пользователь взаимодействует с устройством. Когда экран выключен (заблокирован), он работает хорошо в течение некоторого времени, позже он не может отправлять запросы и получать данные GPS. Поэтому я использовал wake lock, чтобы включить экран на 30 секунд, чтобы устройство выходило из режима ожидания.

Этот подход прекрасно работает в Android 8,9, но в Android 10 он по-прежнему дает сбой. Я даже использовал PowerManager.LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF также активировать блокировку пробуждения, но тем не менее вызовы HTTP и данные GPS блокируются. Я реализовал Logger для сохранения каждого действия, которое хранится в файлах. Я вижу, что служба вызывается, но данные GPS не запускаются. Еще одна вещь заключается в том, что я реализовал Таймер , используя Обработчик и даже Задача таймера для обработки Таймаут местоположения , чтобы я мог отправлять другие данные когда происходит тайм-аут, иногда это работает, а иногда не получается.

Как я могу решить эту проблему? Есть ли обходной путь.

Примечание: Причина, по которой я использовал диспетчер аварийных сигналов, заключается в том, что они фактически срабатывают, когда устройство находится в режиме ожидания. Работа менеджера, как я понимаю, предназначена для работы, которая может быть отложена. BTW Work Manager не работал на китайском языке, когда приложение закрыто.

...