这几天被一个问题困扰了很久,就是app里面连接蓝牙设备之后解绑断开,蓝牙回调也显示了断开,但是自己再去搜就搜不到了。找了很久原因发现在手机设置的蓝牙配对列表中发现该设备已被配对,导致手机搜不到。然后就找到一个方法得到手机配对的蓝牙列表然后再通过反射的机制取消蓝牙的配对,到这里之后手机就能搜到了蓝牙。但是之后的每一次连接都需要再重新配对。接下来贴下代码:
//得到配对的设备列表,清除已配对的设备
public void removePairDevice(){
if(mBluetoothAdapter!=null){
Set<BluetoothDevice> bondedDevices = mBluetoothAdapter.getBondedDevices();
for(BluetoothDevice device : bondedDevices ){
unpairDevice(device);
}
}
}
//反射来调用BluetoothDevice.removeBond取消设备的配对
private void unpairDevice(BluetoothDevice device) {
try {
Method m = device.getClass()
.getMethod("removeBond", (Class[]) null);
m.invoke(device, (Object[]) null);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
就是这样就解决了断开因为配对而搜不到的问题。