Android,如何让BLE设备配对设备(保税)

在GATT之前,createRfcommSocketToServiceRecord,createInsecureRfcommSocketToServiceRecord

方法可以使配对设备,

但GATT没有配对设备的选项,只能使用BluetoothDevice.connectGatt(…)

如果已经连接,我想要配对设备。

谢谢。

Solutions Collecting From Web of "Android,如何让BLE设备配对设备(保税)"

据我所知,在BLE中启动配对程序有两种方法:

1)从API 19开始,你可以通过调用mBluetoothDevice.createBond()来开始配对。 您无需连接远程BLE设备即可开始配对过程。

2)当你尝试做一个GATT操作时,我们以这个方法为例

 mBluetoothGatt.readCharacteristic(characteristic) 

如果远程BLE设备需要绑定,则在回拨时进行任何通信

onCharacteristicRead( BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status)

被调用的status参数值将等于GATT_INSUFFICIENT_AUTHENTICATIONGATT_INSUFFICIENT_ENCRYPTION ,而不等于GATT_SUCCESS 。 如果发生这种情况,配对程序将自动开始。

这是一个例子,当onCharacteristicRead被调用时,找出它何时失败

 @Override public void onCharacteristicRead( BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if(BluetoothGatt.GATT_SUCCESS == status) { // characteristic was read successful } else if(BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION == status || BluetoothGatt.GATT_INSUFFICIENT_ENCRYPTION == status) { /* * failed to complete the operation because of encryption issues, * this means we need to bond with the device */ /* * registering Bluetooth BroadcastReceiver to be notified * for any bonding messages */ IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED); mActivity.registerReceiver(mReceiver, filter); } else { // operation failed for some other reason } } 

其他人提到这个操作会自动启动配对程序: Android蓝牙低能耗配对

这就是接收机如何实现的

 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) { final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR); switch(state){ case BluetoothDevice.BOND_BONDING: // Bonding... break; case BluetoothDevice.BOND_BONDED: // Bonded... mActivity.unregisterReceiver(mReceiver); break; case BluetoothDevice.BOND_NONE: // Not bonded... break; } } } };