配套设备配置文件

Android 12 中引入的配套设备配置文件是一项功能,可让配套应用请求一组特定于配套设备类型(例如智能手表)的权限。通过使用配套设备配置文件,应用可以在移动设备上向用户显示一个提示来请求一组定义的权限,而不是显示多个提示来分别请求各项权限,从而简化注册流程。 这可以精简配套应用的设置体验,提高选择接受率。

配套设备配置文件仅适用于拥有配套设备的设备制造商。配套设备必须符合要求并获得批准,才能使用该功能。

Android 12 中提供以下配套设备配置文件类型:COMPANION_DEVICE_WATCH

如需详细了解配套设备,请参阅配套设备配对

设备行为

本部分介绍了使用配套设备配置文件时的设备行为。

应用会请求创建与配套设备的关联,当用户接受该请求时,CompanionDeviceManager (CDM) 服务会等待配套设备进行连接。连接时,CDM 会为配套应用指定设备配置文件角色(例如手表),从而授予为该配置文件角色定义的所有权限。图 1 中的示例显示了应用请求获取为 COMPANION_DEVICE_WATCH 设备配置文件定义的权限。

手表设备配置文件对话框提示

图 1. 对话框中显示了应用请求获取为手表设备配置文件定义的权限。

如果应用与配套设备之间的关联被移除(例如,清除软件包的数据,或忘记设备后),CDM 会撤消应用的设备配置文件角色,这会从应用中移除为该配置文件角色定义的所有权限。

用户接受应用的请求,授予为特定设备配置文件定义的权限后,可以撤消授予的各项权限。 用户撤消某项权限时,应用仍与配套设备保持关联,但某些功能可能会变得不可用。如果应用需要该权限才能正常工作,则必须通过正常的权限请求来请求该权限。

要求

配套应用必须满足以下要求,才能使用配套设备配置文件 API:

  • 拥有配套设备(例如智能手表)。
  • 有正当的理由来请求为配套设备配置文件定义的权限。

手表配套设备配置文件要求

下表列出了为 COMPANION_DEVICE_WATCH 设备配置文件角色定义的权限,以及使用这些权限需要满足的要求。

权限 配套应用和设备要求
通知

BIND_NOTIFICATION_LISTENER_SERVICE
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 具有能够显示通知的屏幕(不包括使用触感反馈而没有屏幕的设备)
  • 提供面向用户的通知体验,例如在配套设备的屏幕上显示电话通知
电话

phone
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有内置麦克风和扬声器,支持语音对话
  • 具有用于显示来电者信息的屏幕
  • 提供面向用户的通话体验(配套应用与电话相关联)
短信

sms
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 具有用于显示短信的屏幕
  • 提供面向用户的短信体验
联系人

contacts
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有显示屏
  • 在通话或短信体验中显示联系人信息
日历

calendar
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有显示屏
  • 在手表上提供面向用户的日历体验
附近的设备

nearby_devices
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有显示屏
  • 在手表上提供面向用户的配对/连接体验
eSIM 卡配置

USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有显示屏
  • 在手表上提供面向用户的体验,允许用户管理运营商提供的订阅者服务
管理正在进行的通话

MANAGE_ONGOING_CALLS
  • 通过蓝牙和/或 Wi-Fi 建立设备连接
  • 有内置麦克风和扬声器,支持语音对话
  • 具有用于显示来电者信息的屏幕
  • 提供面向用户的通话体验(配套应用与电话相关联)

获取访问权限

应用必须获得批准,并添加到许可名单中,才能使用配套设备配置文件,而不显示用户意见征求对话框。Android 团队收到将应用添加到许可名单的请求后,会对应用进行审核,确保其符合相应配套设备配置文件的要求

实现

对于使用特定设备实现配套应用的设备制造商,请使用以下必需的 Android 系统配置对配套应用进行认证,从而使应用可以跳过向用户显示 CDM 提示的步骤。

  1. 使用以下命令检索证书:

    keytool  -printcert -jarfile PATH/TO/APK
    
  2. 替换软件包名称和证书,如配置文件中的以下示例输入所示:

    <!-- A list of packages managing companion device(s) by the same manufacturers as the main device.
    It will not create the association without prompting if the association has been called multiple
    times in a short period. Note that config_companionDeviceManagerPackage and config_companionDeviceCerts
    are parallel arrays. -->
    
        <string-array name="config_companionDevicePackages" translatable="false">
            <item>YOUR_COMPANION_APP_PACKAGE_NAME</item>
        </string-array>
    
        <!-- A list of SHA256 Certificates managing companion device(s) by the same manufacturers as the
        main device. It will fall back to showing a prompt if the association has been called multiple
        times in a short period. Note that config_companionDeviceCerts and config_companionDeviceManagerPackage
        are parallel arrays.
        Example: "1A:2B:3C:4D" -->
    
        <string-array name="config_companionDeviceCerts" translatable="false">
            <item>YOUR_COMPANION_APP_CERTIFICATE</item>
        </string-array>
    
  3. 使用 AssociationRequest 向单个配套设备发出关联请求。

对于第三方开发者,如要实现请求 DEVICE_PROFILE_WATCH 配置文件的配套应用,请执行以下操作:

  1. 调用 setDeviceProfile 方法。
  2. 在构建 AssociationRequest 时传入 DEVICE_PROFILE_WATCH 配置文件。

验证

如需测试配套设备配置文件功能的行为,请使用 cts/tests/tests/companion/ 中的 CTS 测试。