車輛越來越依賴連接來管理原始設備製造商和車主要求的越來越多的用例,從而導致數據足跡和相關成本增加。使用按應用程式網路選擇 (PANS)功能在 OEM 付費的網路上路由指定應用程式的流量。
透過 PANS,您可以管理資料使用量和成本,同時提供強大、安全且互聯的汽車體驗。平移系統:
- 包含新增至
ConnectivityManager
的新 API,僅適用於汽車設備。 - 提供更新的 Wi-Fi 建議 API(請參閱用於網際網路連線的 Wi-Fi 建議 API )以包含動態變更 PANS 網路功能的支援。
- 收集支持指標。
- 提供參考應用程式。
為什麼選擇PANS?
PANS 可以:
- 動態更新應用程式到網路的對應。
- 管理應用程式級路由,無需對應用程式進行更改。
- 只有 OEM 允許的應用程式才能存取已對應的 OEM 網路。
- 應用程式開發人員無需進行任何更改即可實現此功能。
- 面向使用者的指標追蹤 OEM 託管網路的應用程式到網路資料的使用情況。
- 網路存取是安全的,不會透過意外用例或未經授權的應用程式被濫用。
- PANS 應用程式到網路對應的變更會傳達給使用者。
- 相同的網路配置適用於所有使用者。
核心優勢
PANS 為 OEM 提供了以下核心優勢:
- OEM 可以取代用戶為網路流量付費:
- 可以免費提供使用者係統更新。
- 可以免費向用戶提供指定應用程式的網路使用情況。
- 用戶可以免費管理遙測和其他分析。
- 即使沒有用戶付費的數據計劃,OEM 也可以確保關鍵應用程式保持連線。例如,即使使用者沒有資料計劃,地圖、助理(免持駕駛)和系統更新等安全關鍵功能也能繼續發揮作用。
- PANS 提供了針對 Android 中網路流量路由的額外控製粒度。例如,OEM 可以為應用程式級流量的路由最佳化定義邏輯網路拓撲。
圖1 。 PANS框架
實施PANS
為了實作 PANS,提供了新的ConnectivityManager
API setOemNetworkPreference
。這個新的 API 將應用程式對應到OemNetworkPreference
。此API僅適用於汽車設備,並被註釋為具有新signature
權限的@SystemApi
。
圖 2.實施 PANS
OEM網路偏好
OemNetworkPreference
是OEM_PAID
和OEM_PRIVATE
NetworkCapabilities
的抽象,將應用程式以套件名稱對應到網路首選項。網路首選項允許網路層次結構。例如,將應用程式對應到OEM_NETWORK_PREFERENCE_OEM_PAID
首選項會導致分配給應用程式的預設網路具有以下優先權:首先使用UNMETERED
網絡,如果UNMETERED
不可用,則使用OEM_PAID
網絡,如果OEM_PAID
不可用,則使用系統預設網路網絡。
-
OEM_PAID
主要用於可在 OEM 和非 OEM 網路上路由的應用程式。 -
OEM_PRIVATE
主要用於 OEM 應用程式以獲得對其專用網路的存取權限。
/** * 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 API
要使用 PANS API:
- 使用
OemNetworkPreferences
將應用程式對應到網路首選項。 - 使用
OemNetworkPreferences
物件呼叫setOemNetworkPreference
。 - 使用
Runnable
介面來監聽 API 完成情況。
例如:
// 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);
注意事項
實施 PANS 時,請記住以下幾點:
- 網路首選項不會在啟動後保留,並且需要在每次啟動時重新套用。
- 若要為應用程式建立首選項,無需安裝該應用程式。因此,可以主動設定已卸載應用程式的網路首選項。
- 在任何給定時間,應用程式只能對應到單一網路首選項。
- 網路偏好設定用於設定應用程式的預設網路。這是當應用程式未透過專用 API 之一指定要使用的網路時使用的網路。這不僅滿足了絕大多數連接需求,還允許繼續使用專門的 API(例如
NetworkRequest
API),以免破壞現有的應用程式用例。例如,當應用程式只想透過不按流量計費的網路執行操作時,PANS 不會強制它使用另一個網路。
設定網路
使用對應的網路首選項時,具有OEM_PAID
或OEM_PRIVATE
功能的網路必須可用。 Android 提供對乙太網路和 Wi-Fi 網路功能配置的支援。對於以太網,您可以使用資源覆蓋config_ethernet_interfaces
。這是在編譯時設定的。
對於 Wi-Fi, WifiNetworkSuggestion
API 可與新的 Android 12 API setOemPaid(Boolean)
和setOemPrivate(Boolean)
一起使用。這可以在運行時更改。
考慮這些例子:
- 名為
config_ethernet_interfaces
資源覆蓋指定:- 要配置的介面的名稱。
- 所需的
NetworkCapabilities
值。<!-- 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>
- 此
WiFiNetworkSuggestion
可以動態變更:ArrayList<WifiNetworkSuggestion> list = new ArrayList<>(); list.add(new WifiNetworkSuggestion.Builder() .setSsid(WifiInfo.sanitizeSsid(ssid)) .setOemPrivate(true) .build()); mWifiManager.addNetworkSuggestions(list);
限制對 PANS 網路的訪問
使用OEM_PAID
或OEM_PRIVATE
功能標記網路會將該網路標記為受限網路。受限網路只能由具有CONNECTIVITY_USE_RESTRICTED_NETWORKS
權限的應用程式使用,該權限由 OEM 控制。
具有此權限的應用程式可以使用受限網絡,前提是應用程式明確要求它們。但是,這些應用程式的預設網路不會受到限制。透過 PANS 映射的應用程式可以將受限 OEM 網路設定為預設網絡,並且不需要受限網絡權限即可使用它們。當此類應用程式具有由 PANS 指定為其預設網路的受限 OEM 網路時,如果應用程式選擇這樣做,它還能夠明確請求所述 OEM 網路。
查看參考應用程式
用戶調試汽車建置中提供了名為NetworkPreferenceApp
的參考應用程式(包括程式碼),並示範如何:
- 使用 PANS 指標。
- 設定 PANS 策略。
- 為設備設定預設策略。
- 明確政策。
- 在啟動時應用策略。
- 使用駕駛分心 API(請參閱駕駛分心指南)。
- 使用
OEM_PAID
和OEM_PRIVATE
動態更新 Wi-Fi。
圖 3.參考應用程式
指標
為了提高資料使用的透明度,收集並提供有關透過OEM_PAID
和OEM_PRIVATE
網路映射傳輸的資料量的指標。
故障排除
大多數故障排除情況都是由應用程式使用錯誤的網路(無網路連線)或資料過量所引起的。若要啟用快速解決方案:
- 連接性
dumpsys
包括活動的每個應用程式預設網路及其關聯應用程式(從 PANS 映射)的清單。 - Netd
dumpsys
包含 UID IP 和防火牆規則。 - Netstats
dumpsys
包括每個應用程式的 PANS 指標。例如,哪些應用程式使用了哪個 OEM 網路。
所有dumpsys
資料都可以透過建立 Android 錯誤報告來取得。