![Uploading Paste_Image_636799.png . . .]
](http://upload-images.jianshu.io/upload_images/2596054-46f96204ef789e92.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
实现类:RxBleClientImpl
对父亲声明的方法进行 具体实现。
扫描蓝牙设备
扫描的代码如下:
rxBleClient.scanBleDevices()
各种检查(值得借鉴啊!):
- 蓝牙是否支持?
- 蓝牙是否启用?
- 位置权限是否授予了?
- 位置服务是否打开了?
继续:
queuedScanOperations:
他就是个集合,存储了当前正在被执行的 可被观察的对象(观察:扫描蓝牙的操作)
继续:
ok,boss来了:
RxBleRadioOperationScan
RxBleRadioOperationScan
1. 生产
我们只需要关注生产了什么东西:
扫描调用了系统的api:bluetoothAdapter.startLeScan(leScanCallback);
扫描到了蓝牙设备,发射扫描到的结果。
2. 操作入队 与 可被观察
rxBleRadio.queue(scanOperation)
3. 控制生产结果
试想:
你在扫描蓝牙设备的时候,蓝牙关闭了,怎么办?
告诉订阅者,蓝牙关闭了呗。
所以要再观察一个东西:
map:转换了 扫描到的蓝牙设备对象。(多包装了一点信息)
** 观察吧:**
share:
- public
- refCount
使之可被多个订阅者 订阅。