Фоновый процесс для Андроид. Желательно на Qt
Есть приложение на Qt для Андроида, получающее данные с датчика по блютус и помещающее данные в файлы. Сейчас нужно сделать так, чтобы эта работа выполнялась непрерывно - 24/7. Предполагаю, что сделать это можно только переделав приложение на Андроид сервис/службу.
Можно ли написать такую службу для Андроида, чтобы система её не останавливала?
Можно ли это сделать (полностью или частично) на Qt?
=================================================== На руках 3 андроид телефона
- старенький Xiaomi Mi 9 Lite (Android 10)
- Samsung A13 (Android 13)
- Redmi 9T (Android 12)
Сделал две попытки решить задачу.
Пытался настроить имеющееся приложение и телефоны так, чтобы Android не останавливал приложение. Это опции типа "замочка", накладываемого на запущенное приложение, списка невыгружаемых приложений и тому подобное. Оказалось, что почти все эти настройки не работают. Единственное, Mi 9 Lite со старым андроидом дал проработать приложению всю ночь, пока не остановил вручную. На остальных телефонах при любых раскладах приложение останавливается в течение часа. Нужно общее решение для современных андроидов.
Попробовал написать модельное приложение - приложение с интерфейсом, которое дополнительно запускает QtService. Наследник QtService вызывает c++ функцию, которая пишет в файл инкрементируемый счетчик. Это тоже долго не работает. Возможно, причина в том, что использовано обычное QApplication, а нужно QAndroidService. Про QAndroidService позднее прочел и нет уверенности, что его использование поможет.
Сегодня узнал, что у Андроида есть разные типы служб (статья довольно старая правда) - подвязанные и запущенные.
Просьба подсказать, в каком направлении грести )
====================== Дополнение 07.01.2024
Пишут, Foreground сервис - не поможет. Вроде есть костыльное решение через совмещение AlarmManager и Foreground Service. Как же странно (
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