之前公司做智能家居类型,其中做了一个智能衣柜项目,与衣柜通信就是用的蓝牙通信。一些操作一些简单的开关指令,蓝牙通信与socket是类似的。
步骤
- 清单文件注册权限
- 启动蓝牙服务(记得在清单文件中静态注册服务)
- 注册蓝牙广播(在蓝牙服务中动态注册蓝牙广播)
- 搜索,绑定,完成
- 退出app,停止服务,并在蓝牙服务的onDestory方法中取消注册蓝牙广播
不想写说明,只想贴代码
第一步:注册权限
1 | <!--获取蓝牙信息状态权限--> |
第二步、第三步、第五步:启动蓝牙服务,注册蓝牙广播,停止服务
1 |
|
这个就是我的蓝牙服务类,这个类的逻辑怎么走的呢?
EventBus的东西我就不说了
首先获取蓝牙适配器
1 | BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); |
- 初始化蓝牙广播,注册蓝牙广播
1 | if (mBluetoothAdapter != null) { |
- 开始准备连接蓝牙设备
1 | /** |
- 上面4步蓝牙扫描就完成了,这里我还要说的是,在服务的onDestory方法里面,记得停止服务
1 | @Override |
- 再就是在清单文件里面静态注册蓝牙服务
1 | <service android:name=".service.BluetoothService"/> |
- 启动服务的方式,我用的是非绑定的方式,同样,记得停止服务。
1 | Intent bluetoothService = new Intent(this, BluetoothService.class); |
1 | stopService(bluetoothService); |
1 | @Nullable |
第四步:搜索,绑定,完成搜索
1 |
|
这个就是我的蓝牙广播类,这个逻辑又是怎么走的呢?
- 前面服务里面注册的两个action,一个BluetoothDevice.ACTION_FOUND,还有一个BluetoothAdapter.ACTION_DISCOVERY_FINISHED,做了一个if判断,是发现了设备还是已经完成了扫描设备
- 发现设备之后,获取蓝牙信息,他这里是获取到一个蓝牙信息就会走一遍这个方法,并不是说一次获取一个列表。
- 找到了蓝牙设备之后就是连接了,伪代码讲解:
1 | // 固定的UUID连接的时候需要uuid |