RxAndroidBLE 源码分析:扫描蓝牙设备

![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()
RxAndroidBLE 源码分析:扫描蓝牙设备_第1张图片

各种检查(值得借鉴啊!):

  1. 蓝牙是否支持?
  2. 蓝牙是否启用?
  3. 位置权限是否授予了?
  4. 位置服务是否打开了?

继续:

RxAndroidBLE 源码分析:扫描蓝牙设备_第2张图片

queuedScanOperations:

他就是个集合,存储了当前正在被执行的 可被观察的对象(观察:扫描蓝牙的操作)

继续:


RxAndroidBLE 源码分析:扫描蓝牙设备_第3张图片

ok,boss来了:

RxBleRadioOperationScan


RxBleRadioOperationScan

1. 生产

我们只需要关注生产了什么东西:

RxAndroidBLE 源码分析:扫描蓝牙设备_第4张图片

扫描调用了系统的api:bluetoothAdapter.startLeScan(leScanCallback);
扫描到了蓝牙设备,发射扫描到的结果。

RxAndroidBLE 源码分析:扫描蓝牙设备_第5张图片
Paste_Image.png

2. 操作入队 与 可被观察

rxBleRadio.queue(scanOperation)
RxAndroidBLE 源码分析:扫描蓝牙设备_第6张图片
Paste_Image.png

3. 控制生产结果

RxAndroidBLE 源码分析:扫描蓝牙设备_第7张图片
Paste_Image.png

试想:
你在扫描蓝牙设备的时候,蓝牙关闭了,怎么办?
告诉订阅者,蓝牙关闭了呗。

所以要再观察一个东西:

RxAndroidBLE 源码分析:扫描蓝牙设备_第8张图片
观察蓝牙开关状态

map:转换了 扫描到的蓝牙设备对象。(多包装了一点信息)

RxAndroidBLE 源码分析:扫描蓝牙设备_第9张图片
Paste_Image.png

** 观察吧:**
share:

  1. public
  1. refCount
RxAndroidBLE 源码分析:扫描蓝牙设备_第10张图片
Paste_Image.png

使之可被多个订阅者 订阅。

你可能感兴趣的:(RxAndroidBLE 源码分析:扫描蓝牙设备)