首先是此部分涉及到的类
- BluetoothAdapter 蓝牙适配器,即该类里面包含了蓝牙使用中常用到的一些API。
- BroadcastReceiver 广播接收者,不难猜测,蓝牙设备开启或者关闭、搜索到周边设备就要来通知应用,那么Android系统就会以广播的方式来通知。
- BluetoothDevice 蓝牙设备,即一个相当于蓝牙设备的类,实现了Parcelable接口,用于Android的IPC通信机制。里面实在广播时发送的蓝牙的相关信息:蓝牙名称,地址,类型和uuid等。
蓝牙设备开启
public void enableBlueTooth() throws Exception {
this.BTadapter = BluetoothAdapter.getDefaultAdapter();
if (BTadapter == null) {
throw new Exception("设备上没有发现有蓝牙设备");
}
if (!BTadapter.isEnabled()) {
BTadapter.enable();
}
}
BTadapter就是BluetoothAdapter的对象,如果获取到的蓝牙适配器对象时null,就说明该设备不支持蓝牙,然后判断蓝牙是否开启,BTadapter .isEnabled()如果没有开启就返回false,BTadapter.enable()用于开启蓝牙设备。
蓝牙设备搜索
@Override
public void searchBlueTooth(Context context,
SearchBlueToothListener mSearchListener) throws Exception {
// TODO Auto-generated method stub
Log.i("info", "准备开始搜索了");
this.mSearchListener = mSearchListener;
enableBlueTooth();
if (BTadapter.isDiscovering()) {
BTadapter.cancelDiscovery();
}
BTadapter.startDiscovery();
IntentFilter iFilter = new IntentFilter(
BluetoothAdapter.ACTION_DISCOVERY_STARTED);
context.registerReceiver(mSearchReceiver, iFilter);
// 创建一个查找蓝牙设备的广播意图
iFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
// 注册一个广播接收者,开启查找蓝牙设备意图后将结果以广播的形式返回
context.registerReceiver(mSearchReceiver, iFilter);
// 创建一个结束查找蓝牙设备结束的广播意图
iFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
context.registerReceiver(mSearchReceiver, iFilter);
}
首先,开启蓝牙设备,然后判断蓝牙设备是否正在搜索,如果正在搜索,就取消搜索,再开启重新搜索。
其次,蓝牙搜索会有开始搜索、搜索到设备、结束搜索三个阶段:
Android系统分别都会在这三个阶段给应用发送广播,应用注册相应的广播接收者,我这里注册了开启、发现、结束三个广播接收意向;在广播接收者中进行操作,而操作每一次使用大多不相同,所以我定义了一个接口,用户实现这个接口然后做自己的响应。
S