Здравствуйте. Если вопросы по Android на этом форуме неуместны, пожалуйста направьте меня к более подходящему ресурсу.
Решение
Наберите на телефоне
*#*#4636#*#*
и укажите только LTE.
– Jullyfish
Спасибо.
Дано:
- Android 15 (LineageOS 22.2) с root доступом;
- SIM-карта.
Проблема:
В текущем местоположении доступно 2 станции от одного мобильного оператора («Сеть и интернет»→«SIM-карты»→ моя карта →«Выбрать сеть»):
- Станция «G» (EDGE);
- Станция «LTE».
2-я станция иногда пропадает минут на 5 и телефон переключается на 1ю станцию, из-за чего соединения на оконечных устройствах «тупят» вместо того, чтобы разорваться и соединиться позже.
Мне бы хотелось «закрепить» 2ю станцию, чтобы когда соединение с ней обрывалось, Android продолжал искать 2ю станцию вместо переключения на 1ю.
Что я пытался сделать:
Насколько я знаю, в Android такой функции нет. Модулей magisk или чего-то схожего мной не было найдено.
У меня была идея попытаться самостоятельно реализовать данную функцию, однако я недостаточно понимаю как работает Android.
Далее я изъясню как, по моему мнению, это работает в Android. Если я ошибаюсь, пожалуйста поправьте меня.
На плате телефона располагается модем с проприетарной прошивкой. Есть проприетарный драйвер (распространяемый как BLOB?) для Linux.
Проприетарный загрузчик (первичный) либо загружает DTB+Linux, либо загружает вторичный загрузчик (условно, u-boot), который загружает DTB+Linux.
В DTB хранится адрес и ID модема, благодаря чему Linux соотносит адрес и проприетарный драйвер модема.
Init Android’а запускает обычного демона, который исполняет системные вызовы в ответ на команды, получаемые через UNIX socket. В ART, API к данному демону выступает сервис TelephonyManager, получающий доступ к сокету через Binder.
В исходниках приложения настроек LineageOS есть метод NetworkSelectSettings.onPreferenceTreeClick, в котором и выбирается станция.
Меня, как я понимаю, интересуют методы TelephonyManager.requestNetworkScan, TelephonyManager.disableDataConnectivity, TelephonyManager.setDataEnabledForReason, TelephonyManager.setNetworkSelectionModeManual - посредством него выбирается станция, верно?
Приложение провайдера с SIM-карты, насколько я понимаю, только заполняет данные APN и выполняет звонки и посылку СМС, то есть не отвечает за соединение со станцией.
У меня, однако, так и не появилось понимания, какая часть кода ответственна за подключение к 1-й станции после разрыва соединения со 2-й. Демон?