車輛越來越需要連線功能,才能管理 OEM 和車主要求日漸增加的用途,導致資料足跡和相關費用增加。使用應用程式專屬網路選取 (PANS) 功能,將特定應用程式的流量導向 OEM 付費網路。
有了 PANS,您就能管理資料用量和費用,同時提供強大、安全且連網的車輛體驗。PANS:
- 包含新增至
ConnectivityManager的 API,僅適用於車用裝置。 - 提供更新的 Wi-Fi 建議 API (請參閱「用於網際網路連線的 Wi-Fi Suggestion API」),支援動態變更 PANS 網路功能。
- 收集支援指標。
- 提供參考應用程式。
為什麼要使用 PANS?
PANS 可能會導致:
- 動態更新應用程式對應網路的對應關係。
- 管理應用程式層級的路由,不必變更應用程式。
- 只有原始設備製造商 (OEM) 允許的應用程式,才能存取對應的 OEM 網路。
- 應用程式開發人員不必進行任何變更,即可實作這項功能。
- 面向使用者的指標會追蹤 OEM 管理網路的應用程式到網路資料用量。
- 網路存取安全無虞,不會因非預期用途或未經授權的應用程式而遭到濫用。
- 系統會向使用者說明 PANS 應用程式對應網路的異動。
- 所有使用者都會套用相同的網路設定。
核心優勢
PANS 為 OEM 提供下列核心優勢:
- OEM 可以為網路流量付費,而非由使用者付費:
- 系統更新可免費提供給使用者。
- 使用者可免費取得指定應用程式的網路用量資訊。
- 使用者可以免費管理遙測和其他分析資料。
- 即使沒有使用者付費的數據方案,原始設備製造商也能確保重要應用程式保持連線。舉例來說,即使使用者沒有數據方案,地圖、Google 助理 (免持駕駛) 和系統更新等安全關鍵功能仍可運作。
- PANS 可提供額外的精細控制,專門用於 Android 中的網路流量路徑。舉例來說,原始設備製造商可以為應用程式層級流量的路徑,最佳化定義邏輯網路拓撲。
導入 PANS
如要實作 PANS,請使用新的 ConnectivityManager API setOemNetworkPreference。這個新 API 會將應用程式對應至 OemNetworkPreference。
這個 API 僅適用於車用裝置,並以新的 signature 權限註解為 @SystemApi。
OemNetworkPreference
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 指定要使用的網路,系統就會使用這個網路。這不僅涵蓋絕大多數的連線需求,也允許繼續使用
NetworkRequestAPI 等專用 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 政策。
- 為裝置設定預設政策。
- 清除政策。
- 在開機時套用政策。
- 使用 Driver Distraction API (請參閱駕駛人分心指南)。
- 使用
OEM_PAID和OEM_PRIVATE動態更新 Wi-Fi。
指標
為提高資料使用情形的透明度,系統會收集並提供透過 OEM_PAID 和 OEM_PRIVATE 網路對應傳輸的資料量相關指標。
疑難排解
大多數疑難排解情況都是因為應用程式使用錯誤的網路 (沒有網路連線),或是資料用量超出上限。如要啟用快速解決方案:
- 「連線」
dumpsys會列出每個應用程式的預設網路,以及相關聯的應用程式 (從 PANS 對應)。 - Netd
dumpsys包含 UID IP 和防火牆規則。 - Netstats
dumpsys包含每個應用程式的 PANS 指標。 例如,哪些應用程式使用哪些原始設備製造商 (OEM) 網路。
建立 Android 錯誤報告即可取得所有 dumpsys 資料。