蓝牙配置文件

蓝牙 API 包括对使用蓝牙配置文件的支持。蓝牙配置文件是基于蓝牙的设备间通信的无线接口规范,例如免提配置文件。要使移动设备连接到无线耳机,这两个设备都必须支持免提配置文件。

蓝牙 API 为以下蓝牙配置文件提供了实现

  • 耳机。耳机配置文件支持将蓝牙耳机与移动电话一起使用。Android 提供了 BluetoothHeadset 类,它是用于控制蓝牙耳机服务的代理。这包括蓝牙耳机和免提 (v1.5) 配置文件。该 BluetoothHeadset 类包括对 AT 命令的支持。有关此主题的更多信息,请参阅 供应商特定的 AT 命令
  • A2DP。高级音频分配配置文件 (A2DP) 定义了如何在蓝牙连接上将高质量音频从一个设备流式传输到另一个设备。Android 提供了 BluetoothA2dp 类,它是用于控制蓝牙 A2DP 服务的代理。
  • 健康设备。Android 支持蓝牙健康设备配置文件 (HDP)。这使您可以创建使用蓝牙与支持蓝牙的健康设备(例如心率监测器、血糖仪、温度计、体重秤等)通信的应用。有关支持的设备及其相应的设备数据专业化代码的列表,请参阅 蓝牙的 HDP 设备数据专业化。这些值在 ISO/IEEE 11073-20601 [7] 规范中也作为命名法代码附件中的 MDC_DEV_SPEC_PROFILE_* 进行引用。有关 HDP 的更多信息,请参阅 健康设备配置文件

以下是使用配置文件的基本步骤

  1. 获取默认适配器,如 蓝牙设置 中所述。
  2. 设置 BluetoothProfile.ServiceListener。此侦听器会在已连接到或断开与服务连接时通知 BluetoothProfile 客户端。

  3. 使用 getProfileProxy() 建立与配置文件代理对象关联的连接。在以下示例中,配置文件代理对象是 BluetoothHeadset 的实例。
  4. onServiceConnected() 中,获取配置文件代理对象的句柄。
  5. 获得配置文件代理对象后,可以使用它来监控连接状态并执行与该配置文件相关的其他操作。

以下代码片段演示了如何连接到 BluetoothHeadset 代理对象,以便您可以控制耳机配置文件

Kotlin

var bluetoothHeadset: BluetoothHeadset? = null

// Get the default adapter
val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()

private val profileListener = object : BluetoothProfile.ServiceListener {

    override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = proxy as BluetoothHeadset
        }
    }

    override fun onServiceDisconnected(profile: Int) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = null
        }
    }
}

// Establish connection to the proxy.
bluetoothAdapter?.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET)

// ... call functions on bluetoothHeadset

// Close proxy connection after use.
bluetoothAdapter?.closeProfileProxy(BluetoothProfile.HEADSET, bluetoothHeadset)

Java

BluetoothHeadset bluetoothHeadset;

// Get the default adapter
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

private BluetoothProfile.ServiceListener profileListener = new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = (BluetoothHeadset) proxy;
        }
    }
    public void onServiceDisconnected(int profile) {
        if (profile == BluetoothProfile.HEADSET) {
            bluetoothHeadset = null;
        }
    }
};

// Establish connection to the proxy.
bluetoothAdapter.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET);

// ... call functions on bluetoothHeadset

// Close proxy connection after use.
bluetoothAdapter.closeProfileProxy(bluetoothHeadset);

供应商特定的 AT 命令

应用可以注册以接收耳机发送的预定义供应商特定 AT 命令的系统广播(例如 Plantronics +XEVENT 命令)。例如,应用可以接收指示已连接设备电池电量的广播,并根据需要通知用户或采取其他操作。为 ACTION_VENDOR_SPECIFIC_HEADSET_EVENT 意图创建一个广播接收器,以处理耳机的供应商特定 AT 命令。

健康设备配置文件

Android 支持蓝牙健康设备配置文件 (HDP)。蓝牙健康 API 包括 BluetoothHealthBluetoothHealthCallbackBluetoothHealthAppConfiguration 类,这些类在 关键类和接口 中进行了描述。

使用蓝牙健康 API 时,了解以下关键 HDP 概念很有帮助

健康设备,例如体重秤、血糖仪或温度计,它将医疗数据传输到智能设备,例如 Android 手机和平板电脑。
接收器
接收医疗数据的智能设备。在 HDP 应用中,接收器由 BluetoothHealthAppConfiguration 对象表示。
注册
用于注册接收器以与特定健康设备通信的过程。
连接
用于在健康设备(源)和智能设备(接收器)之间打开通道的过程。

创建 HDP 应用

以下是创建 HDP 应用涉及的基本步骤

  1. 获取 BluetoothHealth 代理对象的引用。与常规耳机和 A2DP 配置文件设备一样,您必须使用 BluetoothProfile.ServiceListenerHEALTH 配置文件类型调用 getProfileProxy(),以建立与配置文件代理对象的连接。

  2. 创建一个 BluetoothHealthCallback 并注册充当健康接收器的应用配置 (BluetoothHealthAppConfiguration)。

  3. 建立与健康设备的连接。

  4. 成功连接到健康设备后,使用文件描述符读取和写入健康设备。接收到的数据需要使用健康管理器进行解释,该管理器实现了 IEEE 11073 规范

  5. 完成后,关闭健康通道并取消注册应用。当长时间处于非活动状态时,通道也会关闭。