停用通过 USB 的数据信号

Android 12 新增了一项功能,IT 管理员可以使用该功能在企业拥有的设备上停用通过 USB 进行的数据信号传输(充电功能除外)。为了支持此功能,OEM 必须更新其 USB HAL,并利用新增的 Device Policy Manager API 支持。

Device Policy Manager

为了支持停用通过 USB 进行的信号传输,DevicePolicyManager 中包含以下三个公共 API:

  • setUsbDataSignalingEnabled(boolean enabled) 是一个 API,它通过调用 UsbManager 中的 enableUsbDataSignal API 来启用或停用 USB 数据信号传输。
  • canUsbDataSignalingBeDisabled() 是一个 API,用于检查设备是否支持启用或停用 USB 数据信号传输。
  • isUsbDataSignalingEnabled() 是一个 API,用于检查 USB 数据信号传输是否已启用。
    • 这是检查是否显示策略透明度对话框窗口所必需的。系统用户可以为此特定 API 调用隐藏的变体,系统用户可以调用该变体来检查是否已为特定用户启用 USB 数据信号传输。
  • Device Policy Manager 实现示例

    以下是如何实现 Device Policy Manager 的示例。
    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 偏好设置,并且 USB 偏好设置不会显示在“已连接的设备”窗口中。

    如果 IT 管理员在企业拥有的设备上停用 USB 数据信号传输,则用户无法修改其 USB 偏好设置。相反,“设置”中的所有 USB 偏好设置都将完全停用,这将创建一个策略透明度对话框窗口。

    注意:如果 USB 数据信号传输被停用,则开发者选项中的 USB 调试、默认 USB 配置和 USB 音频路由偏好设置都将被停用。