
蓝牙设备App线下开发——蓝牙 H5 开发指导
智慧生活 App 发现蓝牙设备
- 开发者修改设备蓝牙广播名称,使之符合蓝牙 HiLink 命名规则。
- 完成设备蓝牙广播名称修改后,由华为方进行后台配置,使 App 支持扫描该名称。(目前由人工配置,后续自动配置)
- 智慧生活 App 扫描到的蓝牙名字满足 HiLink 命名规则,即当做智慧生活设备处理。根据设备注册时传入的 SN 判断此设备是否已注册,未注册的显示,已注册的不显示。
蓝牙HiLink命名规则: Hi-AA…AA-XYYYYSSNNNN
- Hi- : 为固定前缀,3字节
- AA…AA :厂商名加上设备名,由厂商决定,1-14个字符。可以包含字母、数字、下划线,不支持其他字符
- - :为固定分隔符
- X:版本号,非0,目前填1. Hi-和-X可以做识别,减少误添加的几率
- YYYY:产品的唯一标识符,即产品的 ProductID,在开发者联盟网站上,注册产品后就会生成。
- SS: 预留扩展字段,缺省为00
- NNNN:序列号 SN,用于区分相同产品的多个设备。
说明
不足4位均做空字符串“”处理,大于等于4位截取前4位当做 SN,可以包含字母、数字、下划线,不支持其他字符。
H5 开发调试前准备
代码文件夹需遵循如下结构,方可在智慧生活 App 中正常访问相应页面。
表1 目录说明
蓝牙设备注册流程
此部分内容需配合蓝牙设备 JSAPI 接口描述使用。
获取手机系统信息,判断手机操作系统是 Android 还是 iOS。
调用 hilink.onBluetoothAdapterStateChange() 监听蓝牙状态变化。
监听到蓝牙开启,则进入注册流程;监听到关闭,则调用 hilink.openBluetoothAdapter() 打开蓝牙。
调用 hilink.getBluetoothAdapterState() 获取手机蓝牙开关状态。
如果未打开,则调用 hilink.openBluetoothAdapter() 打开蓝牙;如果是打开状态,则进入注册流程。
设备注册
注册时,蓝牙设备固件版本(fwv,如1.0)及蓝牙设备硬件版本(hwv,如1.0)需与 HiLink 开发者平台上的版本号一致。
注册页建议有连接设备的进度提示,进度条或百分比、连接成功、连接失败等。30秒连接不上,可以提示连接超时。
Android 系统
iOS系统
iOS 的注册流程分为两种情况,都需要蓝牙硬件暴露 MAC 地址。
- 情况一:通过 hilink.startBluetoothDevicesDiscovery([],0,1) 开启扫描,在 hilink.onBluetoothDeviceFound() 回调参数中包含 MAC 地址
- 情况二:通过 hilink.startBluetoothDevicesDiscovery([],0,1) 开启扫描,在 hilink.onBluetoothDeviceFound() 回调参数中不包含 MAC 地址
说明
- 如果蓝牙已打开,则获取当前页面被选中的未注册的设备,调用 hilink.getCurrentUnregisteredDevice() ,获取设备 deviceId (iOS 为 UUID)。
- 监听寻找到新设备, 同时调用 hilink.onBluetoothDeviceFound ()、hilink.startBluetoothDevicesDiscovery([],0,1)。
通过 hilink.onBluetoothDeviceFound () 的回调,查看监听到的新设备中的 deviceId 属性,与 getCurrentUnregisteredDevice 中获取的 UUID 对比,如匹配上,说明已经找到要注册设备。
通过扫描设备回调参数中的 manufacturerDate,解析获得 MAC 地址。
- 调用 hilink.stopBluetoothDevicesDiscovery() 停止扫描附近的蓝牙设备。
- 通过 UUID 连接蓝牙。连接成功后使用 mac 地址调用 hilink.registerBleDevice() 注册设备到 App 九宫格界面。
如果蓝牙已打开,则获取当前页面被选中的未注册的设备,调用 hilink.getCurrentUnregisteredDevice() ,获取设备 deviceId (iOS 为 UUID)。
通过 UUID 调用 hilink.createBLEConnection() 连接蓝牙。
连接成功后。通过 180a 服务和 2a23 特征值读取 MAC。首先调用 hilink.notifyBLECharacteristicValueChange (deviceId, '0000180a-0000-1000-8000-00805f9b34fb','00002a23-0000-1000-8000-00805f9b34fb', true),当返回0时,表示通知成功。
调用 readBLECharacteristicValue(deviceId, '0000180a-0000-1000-8000-00805f9b34fb','00002a23-0000-1000-8000-00805f9b34fb', callback),读取 MAC。
调用 hilink.registerBleDevice() 注册。
如果蓝牙已打开,则获取当前页面被选中的未注册的设备,调用 hilink.getCurrentUnregisteredDevice() ,获取设备 deviceId (安卓为 MAC 地址)。
获取 deviceId 后,调用 hilink.createBLEConnection() 连接蓝牙设备 。
连接蓝牙设备时,需要监听蓝牙连接状态的改变事件。调用 hilink.onBLEConnectionStateChange() 可以获得连接结果。
说明
如果连接异常,则重新启动注册流程。
成功连接蓝牙设备,则通知底层在IOT云端注册蓝牙设备,调用 hilink.registerBleDevice() 注册设备到 App 九宫格界面。
