MG4 · KLEVE
Android Auto
Neben dem Web-Dashboard und der Uhr-App gibt es eine Android-Auto-App, die direkt auf dem Display des MG4 läuft. Wichtig zum Verständnis: Das ist eine Telefon-Projektion – die App läuft auf dem Handy und wird per Android Auto aufs Auto-Display gespiegelt. Es ist keine ins Fahrzeug eingebaute Android-Automotive-OS-App; die braucht der MG4 nicht, und so bleibt alles eine ganz normale Handy-App.
Vier Ansichten gibt es: eine Startseite mit den Live-Werten des Autos, eine Statistik-Seite mit Gesamtwerten, die Ladestationen in der Nähe und die Detailansicht einer einzelnen Ladestation.
Die Startseite ist ein Kachel-Raster mit den aktuellen Fahrzeugwerten: Akkustand, Reichweite, Ladestatus (während des Ladens die Leistung in kW, sonst „Nicht am Laden“), Außen- und Innentemperatur sowie die Spannung der 12-V-Bordbatterie. Die Werte färben sich zur schnellen Einordnung grün / gelb / rot – etwa der Akkustand unter 30 % gelb, unter 15 % rot, die 12-V-Spannung unter 12,4 V gelb. Diese Schwellen sind eine eigene, aus der EV-Praxis abgeleitete Einschätzung, keine Kopie eines Web-Werts.
Eine zusätzliche Wind-Kachel erscheint nur, während tatsächlich gefahren wird – sie zeigt die Gegen- oder Rückenwind-Komponente (gelb bei Gegenwind, grün bei Rückenwind) und wird ganz weggelassen, wenn gerade keine aussagekräftige Fahrtrichtung vorliegt, statt einen leeren Platzhalter zu zeigen. Die Seite aktualisiert sich alle 30 Sekunden im Hintergrund selbst. Über die Kopfzeile geht es zu den beiden anderen Bereichen: Statistik und Ladestationen.
Der zweite Bereich fasst Gesamt- und Enthusiasten-Werte zusammen: gefahrene Gesamtstrecke, Durchschnittsverbrauch pro 100 km, insgesamt zurückgewonnene (rekuperierte) Energie, eingespartes CO₂, die höchste je gemessene Ladeleistung und der durchschnittliche windbedingte Mehrverbrauch. Reine Anzeige, keine Steuerung – bewusst so gehalten, damit sie den Android-Auto-Richtlinien für Fahrsicherheit entspricht.
Die dritte Ansicht zeigt eine Karte mit den Ladesäulen im Umkreis. Wie in Google Maps sind mehrere Ladepunkte am selben Ort zu einer Zeile zusammengefasst, und als Titel steht die echte Adresse statt eines technischen Betreibernamens. Jede Zeile fasst kurz zusammen, was es dort gibt: Anzahl der Anschlüsse, Leistungsbereich und günstigster Preis. Ein Tipp auf eine Zeile öffnet die Detailansicht.
Tippt man einen Ladeort an, öffnet sich die Detailseite mit den einzelnen
Anschlüssen. Gleichartige Anschlüsse werden mit Anzahl zusammengefasst
(z. B. „CCS · 300 kW (4×)“), und die technischen Stecker-Kürzel
werden lesbar gemacht – aus iec62196T2COMBO wird schlicht
„CCS“. Zu jedem Anschluss steht der Ad-hoc-Preis; ist die Preisquelle nicht
bestätigt, wird das mit einem vorangestellten „~“ kenntlich gemacht. Zum
Vergleich wird der günstigste eigene Abo-Tarif eingeblendet. Ein
„Navigieren“-Knopf übergibt den Ladeort an die
Standard-Navigations-App des Autos.
Die App spricht per HTTPS mit demselben Backend, das auch dieses Dashboard
bedient. Für die Fahrzeugwerte nutzt sie dieselben öffentlichen,
unauthentifizierten Endpunkte wie das Dashboard
(GET /api/public/status für die Statuswerte,
GET /api/public/current-trip für den Wind während der Fahrt) –
es gilt also dieselbe Datenschutz-Grenze: kein Standort, keine
Kosten, keine sicherheitsrelevanten Zustände. Die Ladestationen
kommen über einen eigenen, token-geschützten Endpunkt
(GET /api/app/stations).
Wichtig: Die App ist OBD-frei – sie liest nichts direkt aus dem Auto aus. Alle Werte stammen vom Server, der sie seinerseits aus der Hersteller-Cloud (SAIC/MG iSMART) bezieht. Und weil die Position für die Ladesäulen-Suche vom Server kommt (die zuletzt bekannte Fahrzeugposition), braucht die App keine eigene Standortberechtigung auf dem Handy.
Man malt bei Android Auto keine eigene Oberfläche. Aus Gründen der
Fahrsicherheit erlaubt das System nur einen festen Satz vorgegebener,
ablenkungsarmer Vorlagen – man beschreibt nur die Inhalte, und das Auto
rendert sie fahrsicher (große Schrift, begrenzte Zeilenzahl, keine frei
platzierten Elemente). Konkret nutzt die App ein Kachel-Raster
(GridTemplate) für Start und Statistik, eine Karten-Liste
(PlaceListMapTemplate) für die Ladestationen und eine
Detail-Ansicht (PaneTemplate) für die einzelne Station.
Wie viele Kacheln bzw. Zeilen erlaubt sind, gibt das jeweilige Fahrzeug
vor. Die App fragt diese Obergrenzen zur Laufzeit ab
(ConstraintManager) und passt sich an, statt feste Werte zu
verdrahten – auf einem Head-Unit mit nur sechs Kachelplätzen entfällt so
z. B. automatisch die zuletzt hinzugefügte Wind-Kachel, ohne dass
etwas bricht.
Der Ladestationen-Endpunkt ist mit einem App-Token
geschützt (Authorization: Bearer …), das im Admin-Bereich
erzeugt und dort nur als kryptografischer Hash gespeichert wird – dieselbe
Machart wie beim Token der Uhr-App, und jederzeit widerrufbar. Die
öffentlichen Status-Endpunkte geben dagegen bewusst kein
GPS, keine Kosten und keine sicherheitsrelevanten Zustände preis
(die gleiche öffentlich-/Admin-Trennung wie im restlichen System). Eine
eigene Standortberechtigung braucht die App nicht.
Anders als die Uhr-App (Jetpack Compose) besteht die Android-Auto-App aus reinen Klassen und Interfaces – das ließ sich weitgehend offline und ohne vollständigen Build prüfen. Den echten Test gab es trotzdem: erst im Desktop Head Unit (dem offiziellen Simulator am Rechner), dann im echten MG4-Display. Verteilt wird die App über den Play-Store-Internal-Testing-Kanal; für jedes Update muss die Versionsnummer hochgezählt und das Ziel-API-Level aktuell gehalten werden (zuletzt auf Android 15 / API 35 angehoben, wie Google es für App-Updates verlangt).
Das Ganze ist – wie das restliche Projekt – ohne Programmier-Hintergrund entstanden. Dass am Ende eine App im Auto-Display läuft, die Ladesäulen wie eine kommerzielle Karten-App aufbereitet, ist entsprechend eher Ausdruck von Hartnäckigkeit als von Routine.