android中ACTION_BOND_STATE_CHANGED的作用
时间: 2023-08-04 15:07:27 浏览: 239
在 Android 中,ACTION_BOND_STATE_CHANGED 是一个系统广播(Intent),用于通知应用程序蓝牙设备的配对状态已更改。当一个蓝牙设备的配对状态发生变化时,系统会发出这个广播,并传递相应的信息给应用程序。应用程序可以注册该广播接收器来接收这个广播,并执行相应的操作。
当一个蓝牙设备配对时,会发送一个 ACTION_BOND_STATE_CHANGED 广播。当配对过程完成后,会发送另一个 ACTION_BOND_STATE_CHANGED 广播,其中包含了设备的配对状态。在收到 ACTION_BOND_STATE_CHANGED 广播后,可以通过 EXTRA_BOND_STATE 参数获取设备的配对状态。
该广播的常用参数如下:
- EXTRA_DEVICE: 表示蓝牙设备的信息。
- EXTRA_BOND_STATE: 表示蓝牙设备的配对状态,包括 BOND_NONE(未配对)、BOND_BONDING(正在配对)、BOND_BONDED(已配对)三种状态。
- EXTRA_PREVIOUS_BOND_STATE: 表示蓝牙设备上一个配对状态,与 EXTRA_BOND_STATE 参数一起使用。
通过监听 ACTION_BOND_STATE_CHANGED 广播,应用程序可以在蓝牙设备配对状态发生变化时进行相应的操作,例如提示用户设备的配对状态,或者在设备已配对时执行相关的逻辑。
相关问题
android在ACTION_BOND_STATE_CHANGED的广播中如何获取状态
在 ACTION_BOND_STATE_CHANGED 广播中,可以通过 EXTRA_BOND_STATE 参数获取蓝牙设备的配对状态。
EXTRA_BOND_STATE 是一个整型参数,表示蓝牙设备的配对状态。它有以下三种取值:
- BOND_NONE(未配对)
- BOND_BONDING(正在配对)
- BOND_BONDED(已配对)
可以通过以下代码获取 EXTRA_BOND_STATE 参数的值:
```
int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
if (state == BluetoothDevice.BOND_BONDED) {
// 设备已配对
} else if (state == BluetoothDevice.BOND_BONDING) {
// 设备正在配对
} else if (state == BluetoothDevice.BOND_NONE) {
// 设备未配对
}
```
其中,`intent` 是收到的 ACTION_BOND_STATE_CHANGED 广播的 Intent 对象,`BluetoothDevice.EXTRA_BOND_STATE` 是 EXTRA_BOND_STATE 参数的键名,`BluetoothDevice.ERROR` 则是一个错误码,表示获取参数失败时的默认值。
通过这种方式可以获取到蓝牙设备的配对状态,并根据状态执行相应的逻辑。
// 监听广播action:搜寻到蓝牙 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); // 找到设备 intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); // 设备绑定状态变化 intentFilter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST); // 设备绑定状态变化 intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); // 开始搜索 intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); // 搜索结束 Log.d(TAG, "onStart: 监听搜寻到蓝牙的广播"); discoveryReceiver = new BleReceiver(); registerReceiver(discoveryReceiver, intentFilter); 改错
代码中没有明确指定 `BleReceiver` 是什么类,需要先定义 `BleReceiver` 类。另外,需要在不使用时注销广播接收器,否则可能导致内存泄漏。
下面是修改后的代码:
```java
// 定义 BleReceiver 类
private class BleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 找到设备
} else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
// 设备绑定状态变化
} else if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)) {
// 设备绑定状态变化
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
// 开始搜索
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
// 搜索结束
}
}
}
// 监听广播action:搜寻到蓝牙
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND); // 找到设备
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); // 设备绑定状态变化
intentFilter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST); // 设备绑定状态变化
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); // 开始搜索
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); // 搜索结束
Log.d(TAG, "onStart: 监听搜寻到蓝牙的广播");
discoveryReceiver = new BleReceiver();
registerReceiver(discoveryReceiver, intentFilter);
// 在不使用时注销广播接收器
unregisterReceiver(discoveryReceiver);
```
阅读全文