BluetoothDevice 是什么
- BluetoothDevice 是用于表示远程蓝牙设备的类。它提供了与设备进行连接、通信以及获取设备信息的功能。在蓝牙通信中,BluetoothDevice 对象代表一个实际的物理设备,比如蓝牙耳机、智能手表、蓝牙音箱等
BluetoothDevice 的主要作用
获取蓝牙设备的信息
- 通过 BluetoothDevice 可以获取设备的一些基本信息,如名称、MAC 地址(唯一标识符)、设备类型等
建立蓝牙连接
- BluetoothDevice 提供了与远程蓝牙设备建立连接的功能,包括经典蓝牙连接和低功耗蓝牙(BLE)连接
管理设备配对
- 通过 BluetoothDevice 可以发起配对请求、取消配对,以及管理已配对的设备
BluetoothDevice 的主要方法与属性
-
device.getAddress()
:得到远程设备的蓝牙 MAC 地址。MAC 地址是一个唯一的硬件标识符,用于识别蓝牙设备BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象 String macAddress = device.getAddress(); System.out.println("MAC 地址: " + macAddress);
- 每个蓝牙设备都有一个唯一的 MAC 地址,类似于
AA:BB:CC:DD:EE
的格式。这个地址用于唯一标识蓝牙设备
- 每个蓝牙设备都有一个唯一的 MAC 地址,类似于
-
device.createBond()
:发起与远程设备的配对(绑定)请求BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象 boolean isBonded = device.createBond(); System.out.println("发起配对请求: " + (isBonded ? "成功" : "失败"));
- 配对过程包括交换安全密钥和确认设备身份,以确保设备之间可以进行安全通信
-
device.getBondState()
:获取设备的绑定状态。返回的状态可以是:BOND_NONE
:未配对、BOND_BONDING
:正在配对、BOND_BONDED
:已配对BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象 int bondState = device.getBondState(); switch (bondState) { case BluetoothDevice.BOND_NONE: System.out.println("设备未配对"); break; case BluetoothDevice.BOND_BONDING: System.out.println("正在配对中..."); break; case BluetoothDevice.BOND_BONDED: System.out.println("设备已配对"); break; }
- 该方法用于检查设备当前的配对状态,以便采取相应的操作(例如,提示用户设备已配对或需要重新配对)
-
device.connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)
:用于连接到远程设备上的 GATT 服务器(低功耗蓝牙设备)。这是一个 BLE 特有的方法BluetoothDevice device = ...; // 已获取的 BluetoothDevice 对象 BluetoothGatt gatt = device.connectGatt(context, false, new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { System.out.println("已连接到设备"); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { System.out.println("设备已断开连接"); } } // 其他回调方法省略... });
- 该方法用于连接到 BLE 设备并与其进行通信。BluetoothGattCallback 回调接口提供了一些回调方法来处理连接状态和数据交换
- 参数解析:
- context:应用的上下文
- autoConnect:如果为 true,则尝试自动连接设备
- callback:用于处理 GATT 事件的回调接口(如连接状态变化、特征读写等)
-
device.getType()
:获取蓝牙设备的类型。设备类型可能是:DEVICE_TYPE_CLASSIC
:经典蓝牙设备(BR/EDR)、DEVICE_TYPE_LE
:低功耗蓝牙设备(BLE)、DEVICE_TYPE_DUAL
:同时支持经典蓝牙和低功耗蓝牙BluetoothDevice device = ...; int deviceType = device.getType(); switch (deviceType) { case BluetoothDevice.DEVICE_TYPE_CLASSIC: System.out.println("设备类型: 经典蓝牙"); break; case BluetoothDevice.DEVICE_TYPE_LE: System.out.println("设备类型: 低功耗蓝牙"); break; case BluetoothDevice.DEVICE_TYPE_DUAL: System.out.println("设备类型: 双模设备"); break; }
- 了解设备类型可以帮助开发者确定如何与设备进行通信,以及选择合适的协议(如经典蓝牙或 BLE)
总结
- BluetoothDevice 是蓝牙编程中的核心类之一,它代表了一个远程蓝牙设备,并提供了与该设备交互的各种方法和属性。通过 BluetoothDevice,可以获取设备信息、管理设备连接和配对、以及实现数据传输等功能