【技术实现步骤摘要】
一种搜索蓝牙BLE设备的有效性过滤方法
本专利技术涉及蓝牙
,具体涉及一种搜索蓝牙BLE设备的有效性过滤方法。
技术介绍
目前,随着安卓系统的普及性越来越高,国内各大厂商根据自家的发展,在Google原生系统上进行二次开发,在满足不同用户的需求的同时,也不可避免的产生了手机机型的兼容性问题,在Google提供的BLE设备搜索API中,就会部分机型在调用startLeScan(UUID[]serviceUuids,LeScanCallbackcallback)时,传入BLE设备提供serviceUuids,这样会导致在周边有存在BLE设备的情况下,LeScanCallback回调中并无任何BLE设备信息上报,即搜索不到设备。因此为了解决该问题,迫切需要一种搜索BLE设备的有效性过滤方法,对BLE设备所带的广播包数据进行解析,获取BLE设备所带的serviceUuids,再对用户所需BLE设备提供的协议中的serviceUuids进行对比,剔除无协议中所述的serviceUuids,提高BLE设备搜索的准确率,减少用户对于 ...
【技术保护点】
1.一种搜索蓝牙BLE设备的有效性过滤方法,其特征在于:包括以下步骤:/n步骤一、通过BluetoothManager类获取BluetoothAdapter对象;/n步骤二、调用搜索方法startLeScan(UUID[] serviceUuids, LeScanCallbackcallback);/n步骤三、在LeScanCallback的回调获取所有周边BLE设备的广播包数据;/n步骤四、解析广播包数据得出BLE设备的ServiceUuids;/n步骤五、通过对比BLE设备协议提供的ServiceUuids,找到所要搜索的BLE设备并且过滤掉不含有该ServiceUui ...
【技术特征摘要】
1.一种搜索蓝牙BLE设备的有效性过滤方法,其特征在于:包括以下步骤:
步骤一、通过BluetoothManager类获取BluetoothAdapter对象;
步骤二、调用搜索方法startLeScan(UUID[]serviceUuids,LeScanCallbackcallback);
步骤三、在LeScanCallback的回调获取所有周边BLE设备的广播包数据;
步骤四、解析广播包数据得出BLE设备的ServiceUuids;
步骤五、通过对比BLE设备协议提供的ServiceUuids,找到所要搜索的BLE设备并且过滤掉不含有该ServiceUuids的BLE设备。
2.根据权利要求1所述的一种搜索蓝牙BLE设备的有效性过滤方法,其特征在于,步骤二具体为:
调用startLeScan(UUID[]serviceUuids,LeScanCallbackcallback)方法:
BluetoothAdapter.startLeScan(null,mLeScanCallback)),
其中UUID[]serviceUuids参数赋值为null,即可搜索出周边所有的BLE设备。
3.根据权利要求1所述的一种搜索蓝牙BLE设备的有效性过滤方法,其特征在于,步骤三具体为:
在LeScanCallback的回调获取所有周边BLE设备的广播包数据;获取所有周边BLE设备的广播包数据的方法:
BluetoothAdapter.LeScanCallbackmLeScanCallback=newLeScanCallback(){
@Override
publicvoidonLeScan(BluetoothDevicedevice,intrssi,byte[]scanRecord){
}
};
其中device为搜索到的BLE设备,rssi为该设备的信号强度,scanRecord为该设备的广播包数据。
4.根据权利要求1所述的一种搜索蓝牙BLE设备的有效性过滤方法,其特征在于,步骤四具体为:
步骤四具体为:
解析广播包数据得出BLE设备的ServiceUuids,调用ScanRecordUtil.parseFromBytes(scanRecord)方法,将广播包数据传值进去解析,同时获得ScanRecordUtil的对象;
根据解析方法,首先得到广播包某个特定位置的字段fieldType=scanRecord[currentPos++]&0xFF,该字段用来标识后面紧跟的字节是何种数据,如BLE设备的名字,服务UUID等;
当fieldType=2或3时,表示后面所带的是16位服务UUID;
当fieldType=4或5时,表示后面所带的是32位服务UUID;
当fieldType=6或7时,表示后面所带的是128位服务UUID;
fieldType为3,该设备为16位服务UUID,当我们获取到服务UUID类型时,采用如下方法将服务UUID提取出来组成新的数组,并将服务UUID装入serviceUuids,其中currentPos为fieldType下标,dataLength为数据长度,uuidLength为服务UUID类型的长度,serviceUuids是用来保存解析出来的服务UUID的容器;
ParcelUuidBASE_UUID=ParcelUuid.fromString("00000000-0000-1000-8000-00805F9B34FB");
privatevoidparseServiceUu...
【专利技术属性】
技术研发人员:鲁霖,蒋少彬,
申请(专利权)人:深圳市芯中芯科技有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。