Как создать резидентное сетевое приложение на Android?
Приветствую!
Вопрос состоит в следующем. Я выступаю в данном случае как заказчик а не как программист и мне нужно оценить возможности и перспективы проекта.
Есть девайс под управлением андроид, версии могут отличаться, поэтому затачиваться на версию здесь на буду. Девайс - не телефон. К девайсу подключаются клиенты по WiFi и девайс в данном случае выступает в роли сервера. Как реализовать чтобы всё это не засыпало и не захлопывалось? Чтобы при включении моб. канала продолжался обмен по WiFi и не слетал маршрут? Возможно ли в андроиде управление сетью на уровне ядра? То есть переключение маршрутов, ifup ifconfig всяческие? Или что-то подобное? Можно ли сделать таким образом автоматическое переключение интерфейсов? Хочу работать гибко как в линуксе. Любые рассуждения приветствуются.
Чисто терминологически - в современных многозадачных системах слово "резидентный" нерелевантен, ибо такое не позволит сама система. Сейчас есть сервисы/демоны/фоновые приложения.
Насколько я знаю, управление сетью доступно хоть в какой-то мере для VPN приложений. Например, если нужно сделать reverse tethering, то на компьютере, к которому подключён телефон в режиме USB модема, включается VPN сервер, и он уже может выдать на телефон нужные настройки, IP-адрес, DNS и т.п. Можно через VPN задать адрес, независимый от типа подключения (Wi-Fi, провод или мобильный интернет), тогда при переключении канала обмен продолжится по тому же адресу. VPN сервер может работать по разным протоколам, которые поддерживаются разными приложениями VPN клиентов: OpenVPN, Wireguard и т.д.
Напрямую без рута и без VPN недоступно никак. Чтобы не засыпало, можно прописать в исключения энергосбережения, но это ничего не гарантирует, как я понимаю. В андроиде есть служба уведомлений, которая работает через серверы гугла и способна разбудить приложение при получении уведомления.
Если устройство работает в качестве сервера по Wi-Fi, можно включать на нём точку доступа - тогда она должна оставаться активной вне зависимости от того, включён ли мобильный интернет или нет. Но в таком режиме довольно быстро садится батарейка.
Хотя я звоню маме по IP-телефонии напрямую на телефон, и звонки на её мобильный андроид проходят без проблем и без всяких уведомлений (но исключения энергосбережения пришлось добавлять, без этого выгружается быстро).