蓝牙配置文件

蓝牙 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 客户端已连接到或断开连接到服务时通知 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. 完成后,关闭健康通道并注销应用程序。当长时间没有活动时,通道也会关闭。