在蓝牙配对过程中,设备会以广播的方式告知应用配对的过程和结果如:配对开始、配对成功与失败、配对结束等,所以这里创建一个MakePariBlueToothListener 的配对监听器的接口,在配对的广播中调用监听器的各个结果由用户处理配对结果。所以要传递一个配对监听器的对象,还有注册广播接收者。
之后依据对方蓝牙地址,获取蓝牙设备对象BluetoothDevice,调用Android的api的device.createBond()方法开始蓝牙配对,之后再以广播的方式获取到配对结果。
在开始配对后调用whilePari( )方法,并将配对的蓝牙设备对象返回给调用者。
在配对成功后调用pairingSuccess( )方法,也将配对的蓝牙设备对象返回给调用者。
在配对失败或者取消后调用cancelPari( )方法,也将配对的蓝牙设备对象返回给调用者。
广播接收者的处理:
private BroadcastReceiver mSearchReceiver = new BroadcastReceiver() { @Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub String action = arg1.getAction(); switch (action) { case BluetoothDevice.ACTION_BOND_STATE_CHANGED: device = arg1.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); switch (device.getBondState()) { case BluetoothDevice.BOND_BONDING:// 正在配对 mMakePariListener.whilePari(device); break; case BluetoothDevice.BOND_BONDED:// 配对结束 mMakePariListener.pairingSuccess(device); break; case BluetoothDevice.BOND_NONE:// 取消配对/未配对 mMakePariListener.cancelPari(device); default: break; } break; } } };在广播接收者中,接收到ACTION_BOND_STATE_CHANGED的广播时,说明配对时蓝牙设备的关系状态发生改变,依据改变的状态,调用之前的蓝牙配对监听器的不同方法。
在收到BOND_BONDING的状态时说明开始配对了,就调用监听器的whilePari( )方法。
接收到BOND_BONDED的状态时说明已经配对了,并且配对成功了,就可以调用监听器的pairingSuccess( )方法。
接收到BOND_NONE就表示配对失败了,或者是配对取消了,就可以调用监听器的cancelPari( )方法。
统一由用户做出不同的相应操作。
首先依据对方的蓝牙地址获取蓝牙设备对象,再从蓝牙设备对象中获取设备连接的Socket,而UUID是由Android设备统一的蓝牙的通用唯一识别码 ,获取到socket后就可以直接在socket中得到对应的输入流和输出流了
socket.connect();InputStream is = socket.getInputStream();这里就是先通过socket建立连接后,获取一个输入流的对象,之后就流的操作了,也不再多说了。
下面贴出整合蓝牙操作的Java源代码:
码云链接:https://gitee.com/D_inasour/codes/8c5yt4nd2xb9uzml10h7e16
csdn资源链接:http://download.csdn.net/download/d_inosaur/9946750
欢迎入门学习交流,系统收费0.1,勿在意: