1、连接线程
经典蓝牙连接相当于socket连接,是一个非常耗时的操作,所以要放在子线程中去完成。(代码:BluetoothChatService中关于蓝牙连接的线程处理);
2、启动连接线程
连接(在配对之后调用),在连接之前吧扫描设备关闭(mBluetoothadapter.cancelDiscovery),
启动connectthread来启动远程设备的连接
启动ConnectedThread开始管理蓝牙设备的连接
在连接完成后还停止所有线程。
选择的连接的设备调用createRfcommSocketToServiceRecord(UUID uuid)获取BluetoothSocket。最后开启一个线程去处理BluetoothSocket。
传入的UUID是唯一的机器生成的标识符。在连接蓝牙设备时必须确保俩个设备的UUID是相同的。
3、判断蓝牙是否连接成功
mBluetoothscoket != null && mBluetoothSocket.isConnected();
这个判断条件来判断蓝牙连接是否成功
也可以根据geState来返回连接状态: SEATE_NONE //没有进行连接
STATE_LISTEN //正在侦听连接
STATE_CONNECTING //状态为连接
STATE_CONNECTED //状态为连接中
STATE_DISCONNECTING //状态为断开中
STATE_DISCONNECTED //状态为断开
连接是否成功以及通知的处理,是声明在OnConnectionSrateChange中,这是在蓝牙连接状态发生变化时调用的方法,这也是最容易出错误的地方,就是手机超过连接数量上限的时候再发起连接导致连接无法连接上的133状态码问题,
(133状态码一般出现在连接的设备数量超过手机最大上限值),解决这一问题就是在不使用连接设备时及时回收掉BlueToothCatt。
4、断开连接
使用 mBluetoothSocket.close 俩断开蓝牙连接
断开蓝牙连接就是把通道Socket断开
mBluetoothGatt.disconnect(); //蓝牙断开连接(代码中disconnectRequest)
mBluetoothGatt.close(); //释放相关资源(代码中使用socket.close)
(close要放在disconnect后面:避免再次连接蓝牙时发生133问题)