蓝牙BLE设备配对后未绑定



我正在做BLE,要求如下:

有一个从本地数据库加载的设备列表。

点击一个特定的设备或行,我必须检查设备是否绑定,如果它是绑定的,我必须导航到特定的屏幕。如果没有绑定,那么配对对话框将成功打开,我也可以输入配对BLE设备的密码。

但问题是,在输入正确的Pair密码后,我无法在广播接收器中获得BLE设备的BONDED状态,如下所示:

(注意:我们知道如果BLE没有被绑定,并且我们尝试连接,那么配对对话框将自动打开)

请检查下面的代码:

private fun initializeBluetoothBroadcastReceiver() {
bluetoothBroadCastReceiver= object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.e("%%%%% ", "%%%%% inside onreceive")
val action = intent.action
if (action == BluetoothAdapter.ACTION_STATE_CHANGED) {
Log.e("%%%%% ", "%%%%% inside ACTION_STATE_CHANGED")
if (bleManager.bluetoothGatt?.device?.bondState == BluetoothDevice.BOND_BONDED) {
Log.e("%%%%% ", "%%%%% inside BOND_BONDED")
if (isBleDeviceConnected) {
Log.e("%%%%% ", "%%%%% inside isBleDeviceConnected")
bleManager.bluetoothGattCallback?.writeTime()
loadBatteryStatusFragement(false)
}
}else{
Log.e("%%%%% ", "%%%%% inside not BOND_BONDED")
}
}else{
Log.e("%%%%% ", "%%%%% inside ACTION_STATE_CHANGED ELSE")
}
}
}
val filter1 = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
filter1.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
registerReceiver(bluetoothBroadCastReceiver, filter1)
}

所以,如果BLE设备没有配对,如果我正在尝试,那么——>配对弹出窗口正在打开,成功输入密码后,我得到以下日志:

%%%%%: %%%%% inside onreceive
%%%%%: %%%%% inside ACTION_STATE_CHANGED ELSE

和没有得到在BOND_BONDED

可能是什么问题?谢谢。

使用的FLAG有问题。

代替此标志:ACTION_STATE_CHANGED

if (action == BluetoothAdapter.ACTION_STATE_CHANGED) {

我们必须使用这个标志:ACTION_BOND_STATE_CHANGED

if (action == BluetoothDevice.ACTION_BOND_STATE_CHANGED) {

解析代码如下:

private fun initializeBluetoothBroadcastReceiver() {
bluetoothBroadCastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val action = intent.action
if (action == BluetoothDevice.ACTION_BOND_STATE_CHANGED) {
if (bleManager.bluetoothGatt?.device?.bondState == BluetoothDevice.BOND_BONDED) {
if(isBleDeviceConnected)
{
performNecessaryAction()
}else{
showConnectionFailedDialog()
}
} else if (bleManager.bluetoothGatt?.device?.bondState == BluetoothDevice.BOND_NONE) {
try {
isBleDeviceConnected = false
DialogUtils.showPairingFailedDialog(
this@HomeActivity,
objLanguageJson?.error_message?.err_battery_pairing_failed
)
performNecessaryAction()
} catch (e: Exception) {
e.printStackTrace()
}
} else if (bleManager.bluetoothGatt?.device?.bondState == BluetoothDevice.BOND_BONDING) {
Log.e("%%%%% ", "%%%%% bonding none")
}
} else if (action == BluetoothAdapter.ACTION_STATE_CHANGED) {
val state =
intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)
Log.e("%%%%% ", "%%%%% state name >>> " + state)
when (state) {
BluetoothAdapter.STATE_OFF -> {
Log.e("%%%%% ", "%%%%% bluetooth turns off ")
val bluetoothAdapter: BluetoothAdapter =
BluetoothAdapter.getDefaultAdapter()
val isEnabled: Boolean = bluetoothAdapter.isEnabled
if (!isEnabled) {
bluetoothAdapter.enable()
}
if (isBleDeviceConnected) {
isBleDeviceConnected = false

BluetoothAdapter.STATE_TURNING_OFF -> {
}
BluetoothAdapter.STATE_ON -> {
}
BluetoothAdapter.STATE_TURNING_ON -> {
}
}
}
}
}
val filter = IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED)
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED)
registerReceiver(bluetoothBroadCastReceiver, filter)
}

最新更新