您的位置:首页 > 移动开发 > Android开发

Android开发蓝牙篇之蓝牙配对、连接与接收数据

2017-08-23 14:50 1216 查看

首先是此部分涉及到的类

BluetoothAdapter 蓝牙适配器,即该类里面包含了蓝牙使用中常用到的一些API。

BroadcastReceiver 广播接收者,不难猜测,蓝牙设备开启或者关闭、搜索到周边设备就要来通知应用,那么Android系统就会以广播的方式来通知。

BluetoothDevice 蓝牙设备,即一个相当于蓝牙设备的类,实现了Parcelable接口,用于Android的IPC通信机制。里面实在广播时发送的蓝牙的相关信息:蓝牙名称,地址,类型和uuid等。

蓝牙配对操作

public void makePair(Context context, String address,
MakePariBlueToothListener mMakePariListener) throws Exception {
this.mMakePariListener = mMakePariListener;
this.context = context;
IntentFilter iFilter = new IntentFilter(
BluetoothDevice.ACTION_BOND_STATE_CHANGED);
context.registerReceiver(mSearchReceiver, iFilter);

enableBlueTooth();
BluetoothDevice device = BTadapter.getRemoteDevice(address);

device.createBond();
}


在蓝牙配对过程中,设备会以广播的方式告知应用配对的过程和结果如:配对开始、配对成功与失败、配对结束等,所以这里创建一个MakePariBlueToothListener 的配对监听器的接口,在配对的广播中调用监听器的各个结果由用户处理配对结果。所以要传递一个配对监听器的对象,还有注册广播接收者。

之后依据对方蓝牙地址,获取蓝牙设备对象BluetoothDevice,调用Android的api的device.createBond()方法开始蓝牙配对,之后再以广播的方式获取到配对结果。

public interface MakePariBlueToothListener {

public void whilePari(BluetoothDevice device);

public void pairingSuccess(BluetoothDevice device);

public void cancelPari(BluetoothDevice device);
}


在开始配对后调用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( )方法。

统一由用户做出不同的相应操作。

蓝牙连接与接收数据操作

public BluetoothSocket getBluetoothSocket(String address)
throws IOException {
BluetoothDevice device = BTadapter.getRemoteDevice(address);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID
.fromString(BlueTooth.MY_UUID));
return socket;
}


首先依据对方的蓝牙地址获取蓝牙设备对象,再从蓝牙设备对象中获取设备连接的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息