車輛越來越依賴連接來管理 OEM 和車主要求的不斷增長的用例列表,從而導致數據佔用量和相關成本增加。使用按應用程序網絡選擇 (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
功能標記網絡將該網絡標記為受限網絡。受限網絡只能由具有 OEM 控制的CONNECTIVITY_USE_RESTRICTED_NETWORKS
權限的應用程序使用。
具有此權限的應用程序可以使用受限網絡,前提是應用程序明確請求它們。但是,這些應用程序不會將受限網絡作為默認設置。通過 PANS 映射的應用可以將受限 OEM 網絡設置為其默認值,並且不需要受限網絡權限即可使用它們。當此類應用程序具有由 PANS 指定為其默認網絡的受限 OEM 網絡時,如果應用程序選擇這樣做,它還可以明確請求所述 OEM 網絡。
查看參考應用程序
在用戶調試汽車版本中提供了一個名為NetworkPreferenceApp
的參考應用程序(包括代碼),並演示瞭如何:
- 使用 PANS 指標。
- 設置 PANS 策略。
- 為設備設置默認策略。
- 清除策略。
- 在啟動時應用策略。
- 使用 Driver Distraction API(請參閱Driver Distraction Guidelines )。
- 使用
OEM_PAID
和OEM_PRIVATE
動態更新 Wi-Fi。
圖 3.參考應用
指標
為了提高數據使用的透明度,收集並提供有關通過OEM_PAID
和OEM_PRIVATE
網絡映射傳輸的數據量的指標。
故障排除
大多數故障排除情況來自使用錯誤網絡(無網絡連接)或數據超量的應用程序。要啟用快速解決方案:
- 連接
dumpsys
包括一個活動的每個應用程序默認網絡及其相關應用程序的列表(從 PANS 映射)。 - Netd
dumpsys
包括 UID IP 和防火牆規則。 - Netstats
dumpsys
包括每個應用程序的 PANS 指標。例如,哪些應用程序使用了哪個 OEM 網絡。
所有dumpsys
數據都可通過創建 Android 錯誤報告獲得。