HUD-приложение для второго дисплея автомболией Lynk Co (Geely Monjaro platform) 01/03/05/09 с операционной системой ГУ - Андроид 9 (oneOS). Отображает навигацию с Yandex Navi и 2ГИС: стрелки поворотов, расстояние до манёвра, название улицы, сигналы светофора и дорожные события (камеры, ДТП, ремонт).
Два независимых источника данных:
-
NotificationListenerService — перехватывает уведомления навигационных приложений, через рефлексию RemoteViews извлекает текстовые представления VIEW приложения в уведомлении: сигналы светофоров, камеры, маневры и иные события. По рефлексии предопределенных пользовательских представлений дествий в RemoteViews определяет устанавливаемые значения и на основе полученных данных интерпретирует свершившееся событие с последующим выводом информации на ХУД.
-
AccessibilityService (
NodeInfoForNavi) — читает accessibility - события в нодах Yandex Navi по заранее известным значениям. Для их предопределения предусмотрен также режим отладки - чтение дерева нодов текущего отображения основного дисплея до 9 уровня вниз - для нагладной отладки на ходу.
Оба пути отправляют broadcast-и в HUDActivity, которая отображает данные на втором дисплее (displayId=2, bounds 0,721,1920,1080) в режиме свободного окна (windowingMode=5) и прозрачной темой окна, чтобы не перекрывать собой другие данные на HUD.
-
Предоставляет подробную информацию о всех маневрах, предусмотренных оригинальным приложением, включая номера съездов с кругового движения и номера поворотов (для AccessibilityService - foreground mode в Яндекс навигаторе), а также дополнително к маневрам - камеры и сигналы светофоров с отсчетом обратного времени (в режиме NotificationListenerService - background mode в Яндекс навигаторе). Маневры для 2gis обеспечиваются лишь в режиме работы background mode для 2gis. Для 2gis маневр определяется прямой передачей иконки уведомления на ХУД. Расстояние и улица - из описания и заголовка уведомления.
-
Сенсоры Geely (ecarx.adaptapi) — 7 датчиков через рефлексию: Обороты, Скорость, Температура салона, Педаль тормоза, Педаль газа, Угол руля, Дождь. Интервалы опроса: 100 мс (скорость/педали/руль/обороты), 5000 мс (температура/дождь). Управление через
SensorPollingManager(синглтон с refCount). -
Ограничение скорости — из Яндекс Навигатора (нода
text_speedlimitвNodeInfoForNavi). Отображается на HUD. При отсутствии broadcast >3 сек — скрывается. -
SpeedDiffGauge — шкала разницы текущая скорость − лимит (−20…+20 км/ч). Вертикальная градиентная полоса (красный→жёлтый→прозрачный), треугольники при превышении лимита, плавное появление/исчезновение (500ms fade). Отключается в настройках (чекбокс «Не показывать штрафометр»).
-
Коэффициент скорости — настраиваемый множитель (по умолч. 3.86), сохраняется в SharedPreferences. Применяется к сырым данным с CAN-шины для корректировки отображаемой скорости.
- Стрелки поворота (25+ типов: налево, направо, разворот, кольцо с номерами съездов и т.д.)
- Расстояние до манёвра и название улицы
- Сигналы светофора (зелёный, жёлтый, красный + секунды до смены)
- Дорожные события: камера, ДТП, дорожные работы
- Уведомления 2ГИС (отображение текущего трека)
- Отображение сенсоров (скорость, обороты, педали, руль, температура, дождь)
- Шкала превышения скорости (SpeedDiffGauge) с fade-анимацией
- Настройка отображения (скрытие улицы, скрытие шкалы превышения, коэффициент скорости)
- Android 9+ (minSdk 28, targetSdk 35)
- Установка как system/priv-app (требуются системные разрешения) — возможна также работа в качестве пользовательского приложения
- Включённый Notification Listener Service
- Включённый Accessibility Service
- Yandex Navi или 2ГИС
- Автомобиль на платформе Geely (ecarx) — Lynk Co 01/03/05/09, Geely Monjaro
- Доступ к системному API Geely (через рефлексию
ecarx.adaptapi)
./gradlew assembleDebug
JDK 17, Gradle 8.11.1, AGP 8.10.1.
Для работы с сенсорами Geely требуется наличие системного API ecarx.adaptapi на устройстве. Приложение не содержит взломанных или модифицированных проприетарных компонентов — используется стандартная рефлексия Java для обращения к уже установленным в системе библиотекам.