Сделать таймер для работы в фоновом режиме при блокировке / снах приложения - PullRequest
0 голосов
/ 20 февраля 2020

Определение проблемы

Приложение представляет собой приложение для конденсаторов ionic4, в котором также используется несколько плагинов Cordova. У меня есть функция таймера, связанная с устройством Bluetooth, которое должно работать, даже когда телефон переходит в спящий режим или в заблокированном режиме. С помощью плагина cordova-background-mode приложение работает в фоновом режиме, но как только телефон заблокирован или находится в спящем режиме, таймер перестает работать. Когда экран возобновляется, таймер продолжает работать с того места, где он остановился.

Я не могу использовать события паузы и возобновления платформы в моем случае, так как просто взятие разницы и сложение со временем приведут к неправильным значениям в моем случае использования , Случай использования, если объяснено ниже:

Это приложение используется с таблицей регулировки высоты, подключенной через Bluetooth, где пользователь может использовать приложение для регулировки высоты, а также отслеживать время, когда он находится в положении стоя. (Таймер начинает работать, когда таблица достигает определенной высоты - достигается с помощью метода startNotification в ble). Стол регулировки высоты также имеет кнопку для управления его высотой.

Вариант использования (Почему я не могу использовать события возобновления и приостановки платформы вместе с метками времени):

  1. Стол находится в положении стоя , Таймер начинает работать.
  2. Я блокирую свой телефон (временная метка создана - при срабатывании события паузы)
  3. I go в сидячем положении в течение 1 часа (В таблице также есть кнопки для управления высотой, поэтому это упоминается, когда пользователь использует это для уменьшения высоты и находится в сидячем положении, но телефон все еще заблокирован / находится в спящем режиме и не уведомляется об изменении)
  4. I go назад в положение стоя для 20 минут
  5. Я разблокирую свой телефон. (Создана вторая отметка времени - при срабатывании события возобновления)
  6. Теперь он будет показывать время ожидания 1 час 20 минут, даже если я стоял только 20 минут

Как я могу разбудить телефон или уведомить, когда состояние устройства меняется, даже когда телефон заблокирован? Я попытался включить сценарий в метод startNotification, который будет создавать метку времени в БД при регулировке высоты. Но это не работает, если телефон заблокирован / спит. Для отправки обновлений БД необходимо, чтобы телефон был разблокирован.

Именно тогда я попытался использовать плагин переднего плана (cordova-plugin-foreground-service) вместе с фоновым режимом, но это не привело к Служба БД при изменении состояния устройства.

Ожидаемое поведение Таймер должен работать либо в фоновом режиме, как приложение проигрывателя musi c, которое продолжает воспроизводиться даже при блокировке телефона. Или он должен быть в состоянии создать вызов БД при изменении состояния устройства. Любой из вышеперечисленных подходов был бы хорош, но правильное время нужно отслеживать.

Застрял в этом вопросе довольно давно. Можно ли сохранить таймер в фоновом режиме, как приложение musi c? Или есть какой-нибудь другой способ вычислить правильное время?

Ps. Бодрствование телефона на данный момент не рассматривается как вариант.

...