前言
最近公司在做关于蓝牙设备的开发,从来没有接触过手机端和外设备连接的开发,周围的圈子也都没做过相关的开发,让我无从下手。在网上查找了好多例子,也找了很多demo。
先来说说链接蓝牙的步骤:
一、初始化蓝牙,判断是否打开蓝牙:
if (mBluetoothManager == null) {
mBluetoothManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
if (mBluetoothManager == null) {
Log.e(TAG, "Unable to initialize BluetoothManager.");
return;
}
}
mBluetoothAdapter = mBluetoothManager.getAdapter();
if (mBluetoothAdapter == null) {
Log.e(TAG, "Unable to obtain a BluetoothAdapter.");
return;
}
if (!mBluetoothAdapter.isEnabled()) {
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enableBtIntent);
}
}
二、链接你想要的蓝牙,进行搜索蓝牙服务:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intentFilter.setPriority(Integer.MAX_VALUE);//设置优先级
// 注册广播接收器,接收并处理搜索结果
mContext.registerReceiver(receiver, intentFilter);
// 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
mBluetoothAdapter.startDiscovery();
三、根据服务UUID进行链接通讯的服务通道:
然而大多数都是讲BluetoothSocket 链接,然后创建服务进行通讯;
下面是链接时的代码
private void connect(BluetoothDevice device) throws IOException {
final String SPP_UUID = getUUID();
Log.i(TAG+"UUID::::",SPP_UUID);
UUID uuid = UUID.fromString(SPP_UUID);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
try {
socket =(BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}).invoke(device,1);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
Log.i(TAG,"正在链接。。。");
socket.connect();
Log.i(TAG,"链接成功");
}
第三步我花了很长时间,换了各种UUID都没有很好的链接上蓝牙,更不用说向蓝牙写入数据了。这种方法在手机与手机进行连接和发送内容是可以的,但是与外设链接并读取数据,这个方法不可行。
这让我痛不欲生啊,iOS端已经可以很好的向蓝牙写入命令,读取外设数据,而安卓还没有链接上设备,这叫我情何以堪。在我对Android心灰意冷的时候,在Android的开发文档中找到了关于蓝牙设备开发的demo,二话不说,直接下载,进行参照。
接下来我会把我自己参照demo写的代码进行说明,方便以后观看。