
如何使用NearLink Kit(二)星闪扫描连接 原创
在文章如何使用NearLink Kit实现星闪广播-| 华为开发者联盟中对NearLink Kit(星闪服务)做了完整的介绍,其中介绍了手机作为星闪服务端的实现API,本文中将介绍如何使用NearLink Kit中的API实现手机扫描、连接其他星闪设备,即星闪通信的第二种实现方式,如下:
方式二:手机扫描广播,连接外围设备
- 外围设备开启广播,等待被连接。
- 手机终端作为中心设备,通过扫描,发现外围设备,获取其广播数据。
- 外围设备和手机连接之后可以进行相应的数据传输。
效果下图所示:
一、NearLink 扫描
首先实现手机扫描周围星闪广播,通过设置过滤参数,获取到扫描结果。接口说明如下:
接口名 | 描述 |
---|---|
startScan(filters: Array<ScanFilters>, options?: ScanOptions): Promise<void> | 启动星闪扫描。 |
stopScan(): Promise<void> | 停止星闪扫描。 |
on(type: ‘deviceFound’, callback: Callback<Array<ScanResults>>): void | 订阅扫描结果。 |
off(type: ‘deviceFound’, callback?: Callback<Array<ScanResults>>): void | 取消订阅扫描结果。 |
1.接口设计
与星闪广播一样,将星闪扫描的方法添加到NearLinkAdvUtil类,扫描相关的两个方法与框架设计如下:
- 带筛选参数的扫描,并通过回调返回扫描结果
- 关闭星闪扫描
2.接口实现
2.1 配置扫描参数
当前星闪扫描API必须指定扫描参数,否则接口调用会直接返回错误。
在NearLinkFilterScan方法中,可以设置如此参数:
- 指定一个目标设备MAC、设备名称(注意,scan.startScan接口支持添加多个筛选设备。)
- 扫描过滤器至少携带一个过滤条件,否则扫描过滤器无效。
- 过滤器可以配置多组,组之间的条件是或的关系。
- 一组过滤器内的条件是与的关系,如:address和deviceName同时满足才会上报。
- 扫描模式:
- scan.ScanMode.SCAN_MODE_LOW_POWER 低频率的扫描模式,省电
- scan.ScanMode.SCAN_MODE_BALANCED 中等频率的扫描模式,扫描快
2.2 扫描结果回调
开启扫描之前,先实现扫描结果回调,使用接口
scan.on(type: ‘deviceFound’, callback: Callback<Array<ScanResults>>): void实现,
在NearLinkFilterScan方法中,onReceiveEvent作为扫描结果的回调函数,在该回调中,通过dataCallback函数dataCallback(data[0]);返回到外部调用,dataCallback()函数需要外部调用实现。
扫描结果回调实现代码如下:
2.3 开启星闪扫描
开启扫描接口为scan.startScan,调用2.1节配置的参数,开启扫描即可。
继续在NearLinkFilterScan方法中添加星闪扫描代码:
2.4 停止星闪扫描
开启扫描接口为scan.startScan,调用2.1节配置的参数,开启扫描即可。
2.5 取消订阅扫描结果
如果需要取消订阅,可以使用scan.off实现,其中onReceiveEvent是在中2.2节中注册的扫描结果回调函数。
二、NearLink 连接
本节讲手机作为SSAP(SparkLink Service Access Protocol,星闪服务交互协议)客户端,去连接扫描到的星闪SSAP服务端。涉及的接口如下:
接口名 | 描述 |
---|---|
createClient(address: string): Client | 创建ssap客户端实例。 |
connect(): Promise<void> | 向服务端发起连接。 |
on(type: ‘connectionStateChange’, callback: Callback<ConnectionChangeState>): void | 订阅连接状态变化事件。 |
1.接口设计
与星闪广播一样,将星闪连接的方法添加到NearLinkAdvUtil类,连接相关的两个方法与框架设计如下:
- 使用星闪扫描到的远端设备MAC创建SSAP客户端并发起连接
2.接口实现
2.1 创建SSAP客户端
ssap.createClient()接口可以创建SSAP客户端实例,输入参数为云端星闪服务端端MAC。实现如下:
2.2 发起连接并订阅状态
主要有以下两个工作:
- 连接过程中的状态可以通过client.on(‘connectionStateChange’, onReceiveConnEvent);注册onReceiveConnEvent回调函数获取。
- 调用client.connect()连接目标SSAP服务端。
NearLinkStartConn中继续添加如下代码:
三、Demo UI 实现
为了验证扫描、连接的接口是否正确,编写一个简单的页面验证。在星闪广播的UI基础上新增一个扫描连接的TabContent,该部分UI都放到NearLinkScanConnect自定义组件中。这里主要讲解以下几点核心实现:
- 如何通过List组件显示扫描结果
- 选中对应设备连接
1.通过List组件显示扫描结果
在NearLink扫描一节提到NearLinkAdvUtil.NearLinkFilterScan方法中scanDataCallback回调需要外部实现。
首先,在UI中,定义NearLinkFilterScan方法的入口参数,并实现scanDataCallback,代码如下:
其次,在UI中使用按钮绑定扫描函数,点击即开启扫描
再次,使用List显示scanDataArray数组。点击列表中的对应设备时,获取目标设备的名称。
最好,再使用发起连接按钮绑定连接方法。
连接之后可以获取SSAP服务端的信息,通过读/写相应的Property即可实现数据交互。目前因为没有手机以外的星闪终端产品,暂时无法验证数据传输功能。有条件的小伙伴可以尝试连接星闪鼠标,获取其服务。
