HarmonyOS鸿蒙Next中关于星闪读取数据的问题
HarmonyOS鸿蒙Next中关于星闪读取数据的问题
环境:MATEPAD 11.5"灵动版,HARMONYOS 5.0, API5.0.4(16); 星闪模块:安信可AI-BS21
可实现连接,平板向星闪模块发送数据,现在卡在读取数据上。
可能是我对星闪通信的运行逻辑没搞清楚,请教一下大佬们:
读取数据方法:
public async NL_data() {
try {
NearLinkAdvUtil.client.getServices().then((result: Array<ssap.Service>) => {
console.info('getServices successfully:' + JSON.stringify(result));
});
} catch (err) {
console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
let buffer = new ArrayBuffer(8)
let uint8Array = new Uint8Array(buffer); // 将ArrayBuffer转换为Uint8Array
let property: ssap.Property = {
serviceUuid: '55E405D2-AF9F-A98F-E54A-7DFE43535355', //'55E405D2-AF9F-A98F-E54A-7DFE43535355',//'37bea880-fc70-11ea-b720-000000004386'
propertyUuid: 'B39B7234-BEEC-D4A8-F443-418843535349', //'16962447-C623-61BA-D94B-4D1E43535349',//'B39B7234-BEEC-D4A8-F443-418843535349',
value: buffer
};
// SSAP服务端Property改变回调,可以获取服务端最新数据
let onReceivePropertyEvent: (data: ssap.Property) => void = (data: ssap.Property) => {
console.info('propertyChange:'+ JSON.stringify(data));
}
try {
NearLinkAdvUtil.client.on('propertyChange', onReceivePropertyEvent);
} catch (err) {
console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message);
}
try {
//setTimeout(()=>{
NearLinkAdvUtil.client.setPropertyNotification(property, true)
.then(() => {
console.info('设置消息变化通知成功');
});//}, 2000);
} catch (err) {
console.error('设置消息变化通知失败 code: ' + (err as BusinessError).code + ' message: ' +
(err as BusinessError).message);
}
try {
await NearLinkAdvUtil.client.readProperty(property).then((result: ssap.Property) => {
console.info('readProperty successfully:' + JSON.stringify(result));
});
} catch (err) {
console.error('消息读取失败 code: ' + (err as BusinessError).code + ' message: ' +
(err as BusinessError).message);}
}
Hilog信息:
05-14 14:20:33.303 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I connect success
05-14 14:20:33.306 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I connectionStateChange:{"address":"94:C9:60:F0:37:89","state":0}
05-14 14:20:33.398 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I connectionStateChange:{"address":"94:C9:60:F0:37:89","state":1}
05-14 14:20:49.354 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I reading
05-14 14:20:49.375 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I 设置消息变化通知成功
05-14 14:20:49.421 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I getServices successfully:[{"serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","properties":[{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","descriptorType":2,"value":{},"isWriteable":false}],"operation":5},{"propertyUuid":"16962447-C623-61BA-D94B-4D1E43535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[{"propertyUuid":"16962447-C623-61BA-D94B-4D1E43535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","descriptorType":2,"value":{},"isWriteable":false}],"operation":5}]}]
05-14 14:20:49.459 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I readProperty successfully:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":5}
05-14 14:20:49.977 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I propertyChange:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":0}
05-14 14:20:49.977 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I propertyChange:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":0}
05-14 14:20:49.978 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I propertyChange:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":0}
05-14 14:20:49.978 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I propertyChange:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":0}
05-14 14:20:49.978 61526-61526 A03D00/com.exa...inktool/JSAPP com.examp...linktool I propertyChange:{"propertyUuid":"B39B7234-BEEC-D4A8-F443-418843535349","serviceUuid":"55E405D2-AF9F-A98F-E54A-7DFE43535355","value":{},"descriptors":[],"operation":0}
问题如下:
- 当星闪模块发出数据时,onReceivePropertyEvent 事件监听到property变化,但value是空的
- 接收到数据时,是填充在property.value里的吗?
更多关于HarmonyOS鸿蒙Next中关于星闪读取数据的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,星闪(NearLink)是一种低功耗、高可靠性的短距离无线通信技术。读取数据时,开发者可以通过调用鸿蒙提供的NearLink API实现设备间的数据传输。具体步骤包括初始化NearLink模块、建立连接、发送和接收数据。鸿蒙Next的NearLink API支持多种数据格式,开发者可以根据需求选择合适的数据处理方式。
更多关于HarmonyOS鸿蒙Next中关于星闪读取数据的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
从日志和代码来看,问题可能出在以下几个方面:
- 关于value为空的问题: 从日志显示"value":{}可以看出,服务端返回的数据确实为空。这可能是因为:
- 星闪模块尚未正确发送数据
- 服务端Property的value字段未被正确初始化
- 数据格式不匹配导致解析失败
-
数据填充位置: 是的,星闪数据应该填充在property.value字段中。从代码看,你使用了ArrayBuffer(8)作为value容器,但服务端返回的value是空对象{},说明数据未正确传输。
-
可能的问题点:
- 检查星闪模块是否确实发送了数据
- 确认serviceUuid和propertyUuid是否与模块端完全匹配
- 检查数据格式是否一致(ArrayBuffer/Uint8Array)
- 建议的调试步骤:
- 先在模块端确认数据是否成功发送
- 检查服务端Property的value初始化
- 尝试简化数据包进行测试
从日志看,连接和属性通知设置都成功了,主要是数据传输环节出现问题。需要重点检查两端的数据处理逻辑是否匹配。