Fahrzeuge sind zunehmend auf Konnektivität angewiesen, um die wachsende Liste der von OEMs und Fahrzeughaltern angeforderten Anwendungsfälle zu verwalten. Dies führt zu einem erhöhten Datenvolumen und damit verbundenen Kosten. Mit der Funktion Netzwerkauswahl pro Anwendung (Per-Application Network Selection, PANS) können Sie den Traffic bestimmter Apps über Netzwerke leiten, die vom OEM bezahlt werden.
Mit PANS können Sie das Volumen und die Kosten der Datennutzung verwalten und gleichzeitig für ein robustes, sicheres und vernetztes Fahrerlebnis sorgen. PANS:
- Besteht aus einer neuen API, die
ConnectivityManagerhinzugefügt wurde und nur für Geräte im Auto verfügbar ist. - Bietet eine aktualisierte WLAN-Vorschlags-API (siehe WLAN-Vorschlags-API für Internetverbindung) mit Unterstützung für dynamische Änderungen der PANS-Netzwerkfunktionen.
- Erfasst unterstützende Messwerte.
- Stellt eine Referenz-App bereit.
Warum PANS?
PANS kann:
- App-zu-Netzwerk-Zuordnungen dynamisch aktualisieren
- App-Routing verwalten, ohne Änderungen an Apps vorzunehmen
- Nur von OEMs zugelassene Apps können auf die zugeordneten OEM-Netzwerke zugreifen.
- App-Entwickler müssen keine Änderungen vornehmen, um dieses Feature zu implementieren.
- Nutzerorientierte Messwerte erfassen die App-zu-Netzwerk-Datennutzung für von OEMs verwaltete Netzwerke.
- Der Netzwerkzugriff ist sicher und kann nicht durch unbeabsichtigte Anwendungsfälle oder nicht autorisierte Apps missbraucht werden.
- Änderungen an der Zuordnung von PANS-Apps zu Netzwerken werden den Nutzern mitgeteilt.
- Für alle Nutzer wird dieselbe Netzwerkkonfiguration angewendet.
Wesentliche Vorteile
PANS bietet OEMs folgende Vorteile:
- OEMs können für den Netzwerkverkehr bezahlen, anstatt Nutzer:
- Systemupdates können dem Nutzer kostenlos zur Verfügung gestellt werden.
- Die Netzwerknutzung bestimmter Apps kann dem Nutzer kostenlos zur Verfügung gestellt werden.
- Telemetrie und andere Analysen können kostenlos für den Nutzer verwaltet werden.
- OEMs können dafür sorgen, dass wichtige Apps auch ohne kostenpflichtiges Datenvolumen des Nutzers verbunden bleiben. Sicherheitskritische Funktionen wie Karten, Assistant (Freisprechfunktion) und Systemupdates funktionieren beispielsweise auch dann, wenn ein Nutzer keinen Datentarif hat.
- PANS bietet zusätzliche Granularität bei der Steuerung des Netzwerk-Traffic-Routings in Android. Beispielsweise können OEMs eine logische Netzwerktopologie für das Routing von App-Traffic optimal definieren.
PANS implementieren
Für die Implementierung von PANS wird eine neue ConnectivityManager API, setOemNetworkPreference, bereitgestellt.
Diese neue API ordnet Apps einem OemNetworkPreference zu.
Diese API ist nur für Geräte im Automobilbereich verfügbar und wird als @SystemApi mit einer neuen signature-Berechtigung gekennzeichnet.
OemNetworkPreference
OemNetworkPreference ist eine Abstraktion von OEM_PAID und OEM_PRIVATE NetworkCapabilities, die Apps anhand des Paketnamens einer Netzwerkpräferenz zuordnet. Netzwerkeinstellungen ermöglichen Netzwerkhierarchien.
Wenn Sie beispielsweise eine App der Einstellung OEM_NETWORK_PREFERENCE_OEM_PAID zuordnen, ergibt sich die folgende Priorität der Standardnetzwerke, die einer App zugewiesen sind: Verwenden Sie zuerst ein UNMETERED-Netzwerk. Wenn UNMETERED nicht verfügbar ist, verwenden Sie ein OEM_PAID-Netzwerk. Wenn OEM_PAID nicht verfügbar ist, verwenden Sie das Systemstandardnetzwerk.
OEM_PAIDWird hauptsächlich für Apps verwendet, die sowohl in OEM- als auch in Nicht-OEM-Netzwerken geroutet werden können.OEM_PRIVATEWird hauptsächlich für OEM-Apps verwendet, um Zugriff auf ein ihnen gewidmetes Netzwerk zu erhalten.
/** * If an unmetered network is available, use it. * Otherwise, if a network with the OEM_PAID capability is available, use it. * Otherwise, use the general default network. */ public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1; /** * If an unmetered network is available, use it. * Otherwise, if a network with the OEM_PAID capability is available, use it. * Otherwise, the app doesn't get a default network. */ public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2; /** * Use only NET_CAPABILITY_OEM_PAID networks. */ public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3; /** * Use only NET_CAPABILITY_OEM_PRIVATE networks. */ public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4;
PANS-APIs aufrufen
So verwenden Sie PANS-APIs:
- Verwenden Sie
OemNetworkPreferences, um eine App einer Netzwerkeinstellung zuzuordnen. - Rufen Sie
setOemNetworkPreferencemit demOemNetworkPreferences-Objekt auf. - Verwenden Sie die
Runnable-Schnittstelle, um auf den Abschluss der API zu warten.
Beispiel:
// Mapping three packages to two network preferences // Packages have a 1:1 mapping to network preferences OemNetworkPreferences pref = new OemNetworkPreferences.Builder() .addNetworkPreference("first.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID) .addNetworkPreference("second.package.name", OEM_NETWORK_PREFERENCE_OEM_PAID) .addNetworkPreference("third.package.name", OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY) .build(); myConnectivityManager.setOemNetworkPreference(pref, myExecutor, myListener);
Wissenswertes
Beachten Sie bei der Implementierung von PANS Folgendes:
- Netzwerkeinstellungen werden nicht über Neustarts hinweg beibehalten und müssen bei jedem Neustart neu angewendet werden.
- Eine App muss nicht installiert sein, um eine Einstellung dafür zu erstellen. Daher können Netzwerkeinstellungen für deinstallierte Apps proaktiv festgelegt werden.
- Eine App kann jeweils nur einer Netzwerkeinstellung zugeordnet werden.
- Mit Netzwerkeinstellungen wird das Standardnetzwerk einer App festgelegt. Dieses Netzwerk wird verwendet, wenn eine App nicht über eine der speziellen APIs angegeben hat, welche Netzwerke sie verwenden möchte. Damit wird nicht nur der Großteil der Konnektivitätsanforderungen abgedeckt, sondern auch die weitere Nutzung spezialisierter APIs wie der
NetworkRequestAPI ermöglicht, damit bestehende Anwendungsfälle nicht beeinträchtigt werden. Wenn eine App beispielsweise einen Vorgang nur über ein Netzwerk ohne Volumenbegrenzung ausführen möchte, wird sie von PANS nicht dazu gezwungen, ein anderes Netzwerk zu verwenden.
Netzwerk konfigurieren
Bei Verwendung einer entsprechenden Netzwerkpräferenz muss ein Netzwerk mit den Funktionen OEM_PAID oder OEM_PRIVATE verfügbar sein. Android unterstützt die Konfiguration von Funktionen für Ethernet- und WLANs. Für Ethernet-Netzwerke können Sie ein Ressourcen-Overlay verwenden: config_ethernet_interfaces.
Dieser Wert wird zur Kompilierzeit festgelegt.
Für WLAN kann die WifiNetworkSuggestion API mit den neuen Android 12-APIs setOemPaid(Boolean) und setOemPrivate(Boolean) verwendet werden. Das kann zur Laufzeit geändert werden.
Hier einige Beispiele:
- Ein Ressourcen-Overlay mit dem Namen
config_ethernet_interfacesgibt Folgendes an:- Der Name der zu konfigurierenden Schnittstelle.
- Die gewünschten
NetworkCapabilities-Werte.<!-- 11 NET_CAPABILITY_NOT_METERED 12 NET_CAPABILITY_INTERNET 14 NET_CAPABILITY_TRUSTED 15 NET_CAPABILITY_NOT_VPN 22 NET_CAPABILITY_OEM_PAID || 26 NET_CAPABILITY_OEM_PRIVATE --> <string-array translatable="false" name="config_ethernet_interfaces"> <item>eth0;11,12,14,15,22;;</item></string-array>
- Diese
WiFiNetworkSuggestionkann dynamisch geändert werden:ArrayList<WifiNetworkSuggestion> list = new ArrayList<>(); list.add(new WifiNetworkSuggestion.Builder() .setSsid(WifiInfo.sanitizeSsid(ssid)) .setOemPrivate(true) .build()); mWifiManager.addNetworkSuggestions(list);
Zugriff auf PANS-Netzwerke einschränken
Wenn Sie ein Netzwerk mit den Funktionen OEM_PAID oder OEM_PRIVATE kennzeichnen, wird es als eingeschränktes Netzwerk markiert. Eingeschränkte Netzwerke können nur von Apps verwendet werden, die die Berechtigung CONNECTIVITY_USE_RESTRICTED_NETWORKS haben. Diese wird von OEMs gesteuert.
Apps mit dieser Berechtigung können eingeschränkte Netzwerke verwenden, sofern sie diese explizit anfordern. Diese Apps erhalten jedoch keine eingeschränkten Netzwerke als Standard. Apps, die über PANS zugeordnet sind, können standardmäßig eingeschränkte OEM-Netzwerke haben und benötigen keine Berechtigung für eingeschränkte Netzwerke, um sie zu verwenden. Wenn einer solchen App von PANS ein eingeschränktes OEM-Netzwerk als Standardnetzwerk zugewiesen wurde, kann sie dieses Netzwerk auch explizit anfordern.
Referenz-App ansehen
Eine Referenz-App (einschließlich Code) mit dem Namen NetworkPreferenceApp ist in User-Debug-Automotive-Builds verfügbar und zeigt, wie Sie Folgendes tun:
- PANS-Messwerte verwenden.
- PANS-Richtlinie festlegen
- Legen Sie eine Standardrichtlinie für das Gerät fest.
- Richtlinie entfernen
- Richtlinie beim Booten anwenden
- Verwenden Sie die Driver Distraction API (siehe Richtlinien zu Ablenkungen für Fahrer).
- WLAN mit
OEM_PAIDundOEM_PRIVATEdynamisch aktualisieren.
Messwerte
Um die Transparenz bei der Datennutzung zu erhöhen, werden Messwerte zur Menge der über die OEM_PAID- und OEM_PRIVATE-Netzwerkzuordnungen übertragenen Daten erhoben und zur Verfügung gestellt.
Fehlerbehebung
Die meisten Probleme bei der Fehlerbehebung sind darauf zurückzuführen, dass eine App das falsche Netzwerk verwendet (keine Netzwerkverbindung) oder dass das Datenvolumen überschritten wurde. So aktivieren Sie die Funktion:
- Unter „Verbindungen“
dumpsysfinden Sie eine Liste der aktiven Standardnetzwerke pro App und der zugehörigen Apps (die aus PANS zugeordnet wurden). - Netd
dumpsysenthält UID-IP- und Firewallregeln. - Netstats
dumpsysenthält Messwerte für PANS pro App. Zum Beispiel, welche Apps welches OEM-Netzwerk verwendet haben.
Alle dumpsys-Daten sind verfügbar, wenn Sie einen Android-Fehlerbericht erstellen.