Фоновый процесс для Андроид. Желательно на Qt

Есть приложение на Qt для Андроида, получающее данные с датчика по блютус и помещающее данные в файлы. Сейчас нужно сделать так, чтобы эта работа выполнялась непрерывно - 24/7. Предполагаю, что сделать это можно только переделав приложение на Андроид сервис/службу.

  • Можно ли написать такую службу для Андроида, чтобы система её не останавливала?

  • Можно ли это сделать (полностью или частично) на Qt?

=================================================== На руках 3 андроид телефона

  • старенький Xiaomi Mi 9 Lite (Android 10)
  • Samsung A13 (Android 13)
  • Redmi 9T (Android 12)

Сделал две попытки решить задачу.

  1. Пытался настроить имеющееся приложение и телефоны так, чтобы Android не останавливал приложение. Это опции типа "замочка", накладываемого на запущенное приложение, списка невыгружаемых приложений и тому подобное. Оказалось, что почти все эти настройки не работают. Единственное, Mi 9 Lite со старым андроидом дал проработать приложению всю ночь, пока не остановил вручную. На остальных телефонах при любых раскладах приложение останавливается в течение часа. Нужно общее решение для современных андроидов.

  2. Попробовал написать модельное приложение - приложение с интерфейсом, которое дополнительно запускает QtService. Наследник QtService вызывает c++ функцию, которая пишет в файл инкрементируемый счетчик. Это тоже долго не работает. Возможно, причина в том, что использовано обычное QApplication, а нужно QAndroidService. Про QAndroidService позднее прочел и нет уверенности, что его использование поможет.

Сегодня узнал, что у Андроида есть разные типы служб (статья довольно старая правда) - подвязанные и запущенные.

Просьба подсказать, в каком направлении грести )

====================== Дополнение 07.01.2024

Пишут, Foreground сервис - не поможет. Вроде есть костыльное решение через совмещение AlarmManager и Foreground Service. Как же странно (

https://stackoverflow.com/questions/54124631/how-to-keep-my-android-app-alive-in-background-for-24-7-continuous-sensor-data-c

  • EDIT: I have made it as foreground service and it works as long as I keep interacting with my phone but if I keep it idle for let's say 4-5 hrs OS kill it despite being listed as foreground service - Gauranga

  • 2 years and 3 months later, I still have this same problem. The best I could get is to use AlarmManager that periodically (every few minutes) calls a BroadcastReceived which in turn calls a Foreground Service, with ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS to avoid Standby Bucketing. In the Service I collect GPS data and light sensor data. The app ran nicely for 5 days and 5 hours, in the background and with no user interaction, but then it got misteriously killed. I already tried all the solutions proposed below, to no avail. – Franco May 1, 2021 at 14:51


Ответы (0 шт):