停用透過 USB 進行數據傳輸

Android 12 新增了 IT 管理員可在公司裝置上停用 USB 資料訊號 (充電功能除外) 的功能。為了支援這項功能,原始設備製造商必須更新 USB HAL,並利用新增的 Device Policy Manager API 支援。

裝置政策管理工具

為支援停用透過 USB 傳送的信號,DevicePolicyManager 中包含以下三個公開 API:

  • setUsbDataSignalingEnabled(boolean enabled) 這個 API 可藉由在 UsbManager 中呼叫 enableUsbDataSignal API,啟用或停用 USB 資料信號功能。
  • canUsbDataSignalingBeDisabled() 是用於檢查裝置是否支援啟用或停用 USB 資料訊號。
  • isUsbDataSignalingEnabled() 這個 API 會檢查是否已啟用 USB 資料訊號功能。
    • 這是必要步驟,可用來檢查是否會顯示政策資訊對話方塊視窗。系統使用者可以呼叫此特定 API 的隱藏變化版本,系統使用者可呼叫該版本,檢查是否已為特定使用者啟用 USB 資料訊號。
  • 裝置政策管理工具實作範例

    以下是如何實作裝置政策管理工具的範例。
    class android.app.admin.DevicePolicyManager {
        /**
         * Called by device owner or profile owner of an organization-owned managed profile to
         * enable or disable USB data signaling for the device. When disabled, USB data connections
         * (except from charging functions) are prohibited.
         *
         * <p> This API is not supported on all devices, the caller should call
         * {@link #canUsbDataSignalingBeDisabled()} to check whether enabling or disabling USB data
         * signaling is supported on the device.
         *
         * @param enabled whether USB data signaling should be enabled or not.
         * @throws SecurityException if the caller is not a device owner or a profile owner on
         *         an organization-owned managed profile.
         * @throws IllegalStateException if disabling USB data signaling is not supported or
         *         if USB data signaling fails to be enabled/disabled.
         */
        public void setUsbDataSignalingEnabled(boolean enabled);
    
    /** * Called by device owner or profile owner of an organization-owned managed profile to return * whether USB data signaling is currently enabled by the admin. * * @return {@code true} if USB data signaling is enabled, {@code false} otherwise. */ public boolean isUsbDataSignalingEnabled();
    /** * Called by the system to check whether USB data signaling is currently enabled for this user. * * @param userId which user to check for. * @return {@code true} if USB data signaling is enabled, {@code false} otherwise. * @hide */ public boolean isUsbDataSignalingEnabledForUser(@UserIdInt int userId);
    /** * Returns whether enabling or disabling USB data signaling is supported on the device. * * @return {@code true} if the device supports enabling and disabling USB data signaling. */ public boolean canUsbDataSignalingBeDisabled();

    設定

    使用者只要連上 USB 裝置,即可修改 USB 偏好設定和網路共用設定。如要存取 USB 偏好設定畫面,請按照下列步驟操作:

    1. 輕觸 [設定]
    2. 輕觸「已連結的裝置」
    3. 輕觸「USB」

    注意:如果未連接 USB,就無法修改 USB 偏好設定,且不會顯示在「已連結的裝置」視窗中。

    如果 IT 管理員在公司裝置上停用 USB 資料訊號,使用者就無法修改 USB 偏好設定。相反地,設定中的所有 USB 偏好設定都會完全停用,這會建立政策資訊對話方塊視窗。

    注意:如果停用 USB 資料訊號,開發人員選項中的 USB 偵錯、預設 USB 設定和 USB 音訊路由偏好設定都會停用。