智石科技推出鸿蒙NEXT BRTBeacon SDK,这是一套适配鸿蒙NEXT版本的Beacon扫描库,基于API 12进行的封装,开发者可以通过调用该SDK,轻松实现对Beacon广播信号的扫描和模拟,在鸿蒙系统上构建基于Beacon相关的应用程序。
开发鸿蒙应用需要使用鸿蒙的IDE进行开发,具体内容请参考鸿蒙官网开发文档
开发环境配置完成后,请参考创建和运行Hello World创建工程。
工程创建完成后,请使用搭载鸿蒙NEXT的手机运行工程。
https://files.brtmap.com/sdk/harmony/BRTBeacon_SDK_HarmonyNext_1.0.0.zip
解压SDK包lib目录内的 BRTBeaconLibrary-xxxx.har(xxxx为版本号)。
在目标工程中根目录中创建libs文件夹
将BRTBeaconLibrary-xxxx.har复制到工程的libs目录里
打开工程根目录下的oh-package.json5文件,添加对BRTBeacon库的引用:
"dependencies": {
"bright-beacon-library": "file:./libs/BRTBeaconLibrary-xxxx.har"
}
打开工程entry内的module.json5文件,在requestPermissions标签下添加蓝牙权限的声明:
"requestPermissions": [
{
"name": "ohos.permission.ACCESS_BLUETOOTH",
"reason": "$string:reason_access_bluetooth",
"usedScene":{
"abilities": [
"EntryAbility"
],
"when": "always"
}
}
]
以entry的pages/Index.ets为例,演示检查并申请蓝牙权限
"requestPermissions": [
{
"name": "ohos.permission.ACCESS_BLUETOOTH",
"reason": "$string:reason_access_bluetooth",
"usedScene":{
"abilities": [
"EntryAbility"
],
"when": "always"
}
}
]
以下代码显示在pages/BeaconScan.ets内添加扫描功能:
import { BRTBeacon, BRTBeaconScanner } from 'bright-beacon-library'
@Entry
@Component
struct BeaconScan {
beaconScanner = new BRTBeaconScanner()
onDidBuild(): void {
// 更新Beacon列表
this.beaconScanner.on('update', this.updateCallback)
// 新增Beacon列表
this.beaconScanner.on('newBeacon', this.newCallback)
// 丢失Beacon列表
this.beaconScanner.on('goneBeacon', this.goneCallback)
}
aboutToAppear(): void {
this.beaconScanner.startScan()
}
aboutToDisappear(): void {
clearInterval(this.taskHandler)
this.beaconScanner.stopScan()
}
private updateCallback = (beacons: Array<BRTBeacon>) => {
// Beacon更新回调
}
private newCallback = (beacons: Array<BRTBeacon>) => {
// Beacon新增回调
}
private goneCallback = (beacons: Array<BRTBeacon>) => {
// Beacon丢失回调
}
}
以下代码显示在模拟Beacon广播:
let uuid: string = "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"let major: number = 1000let minor: number = 2000beaconAdvertiser: BRTBeaconAdvertiser = new BRTBeaconAdvertiser(uuid, major, minor);beaconAdvertiser.startAdvertising();//退出时关闭广播功能beaconAdvertiser.stopAdvertising();| 属性 | 类型 | 说明 |
| deviceId | string | 设备ID |
| deviceName | string | 设备名称 |
| uuid | string | UUID |
| major | number | 范围【0..65535】 |
| minor | number | 范围【0..65535】 |
| rssi | number | 信号强度 |
| txPower | number | 发射功率 |
| isBB | number | 是否包含BRTBeacon扩展数据 |
| msPower | 测量功率【BRTBeacon有效】 | |
| hardwareType | number | 设备型号【BRTBeacon有效】 |
| firmwareNum | number | 固件版本【BRTBeacon有效】 |
| deviceMode | number | 设备模式 0:开发模式, 1:部署模式 【BRTBeacon有效】 |
| battery | number | 电量【0..100】 |
| address | number | 设备蓝牙MAC【BRTBeacon有效】 |
| 方法/属性 | 参数 | 返回结果 | 说明 |
| startScan() | 无 | 无 | 开启Beacon扫描 |
| stopScan() | 无 | 无 | 关闭Beacon扫描 |
| on(type, callback) | type: string (详见 type表格) callback: Callback> 状态更新接口回调函数 | 无 | 添加扫描监听 |
| off(type, callback) | type: string(参考on方法) callback: Callback> 状态更新接口回调函数 | 无 | 移除扫描监听 |
| scanAutoRetry | boolean类型 true: 开启自动重试 【默认】 false: 关闭自动重试 | true: 自动重试开启 false: 自动重试关闭 | 扫描失败后,将自动重试 【注意:需在扫描开启前设置】 |
| beaconUpdateMillis | number类型 更新周期 (毫秒) 【默认 1000毫秒】 | 获取更新周期(毫秒) | 获取、设置更新周期 【注意:需在扫描开启前设置】 |
| scanDutyMode | ble.ScanDuty类型 功耗模式【默认 低延迟】 【注:请参考鸿蒙NEXTble.ScanDuty文档说明】 | 无 | 设置扫描功耗模式 【注意:需在扫描开启前设置】 |
| 方法 | 参数 | 返回结果 | 说明 |
| constructor(uuid, major, minor) | uuid: string uuid实符串 major:number 范围【0-65535】 minor:number 范围【0-65535】 | 构造需要广播的模拟的Beacon数据 | |
| startAdvertising() | 无 | 无 | 开启Beacon广播 |
| stopAdvertising() | 无 | 无 | 关闭Beacon广播 |