当前位置: 首页 > article >正文

openharmory-鸿蒙生态设备之间文件互传发现、接入认证和文件传输

软件版本

OpenHarmony系统版本基线:基于 OpenHarmony-v5.0.0-Release。

图库应用版本:基于OpenHarmony-v5.0.0-Release。

文件管理器应用版本:基于OpenHarmony-v5.0.0-Release。

7 用户历程图

用户历程图

8 设备发现

8.1 设备交互流程图

设备交互流程图

8.2 设备发现流程

设备发现流程图

8.3 发现报文

OpenHarmony生态设备统一分享ADV报文

字段长度(byte)数值描述是否必选
Length10x02Length后面报文长度
Type10x16ADType,后续ADData使用UUID&自定义扩展
UUID20xFE35华为分享UUID
CmdId10x2E命令字
TypeList1XX数据类型集合,bit0~8对应8种数据类型(bit0:BTName,bit1:DeviceType bit2:UserToken)
DevName18XX设备名
DeviceType2XX设备类型:用于标识设备形态,每bit标识一个type(剩余待扩展):
TYPE_1_0_PHONE = 1
TYPE_2_0_PHONE = 2
TYPE_PC = 3
TYPE_TV = 4
TYPE_PAD = 5
TYPE_BLE_CONNECT_PC = 6
TYPE_WATCH=7
TYPE_CAR=8
UserToken2XX用户应用token,恢复出厂后重新生成
Reserved3XX保留字段
Extended Broadcasting(N bytes)
AdvA(广播地址)AdvData(广播数据)
AD Sturcture1AD Sturcture2AD Sturcture3AD AD Sturcture4
AD Sturcture1:
字段长度(byte)数值(示例)描述是否必选
Length10x02AD Type和AD Data字段的总长度
AD Type10x01表示“Flags”类型的数据。Flags类型的数据用于提供关于广播设备的一些基本信息,如是否支持LE General Discoverable Mode(LE通用可发现模式)等。
AD Data10x02表示蓝牙设备物理连接能力,支持ble通用可发现模式,且支持br/edr
AD Sturcture2:
Length10x1BAD Type和AD Data字段的总长度
AD Type10x16数据结构包含的是Service Data,前两个字节表示一个16位的UUID,用于向扫描设备提供有关广播设备所支持的服务的信息
AD Data20xEEFDUUID(通用唯一标识符,固定)
10x04蓝牙协议版本
10x05软总线业务
10x10bit0当advId == CON_ADV_ID且isWakeRemote时该位置一;
bit4
bit7当advId == CON_ADV_ID时该位置一;
20x5FEC当advId == CON_ADV_ID时从DeviceInfo中获取accountHash;
当advId != CON_ADV_ID时用LnnGetLocalByteInfo从BYTE_KEY_ACCOUNT_HASH中获取accountHash;
10x10capabilityBitmap
10x00
10x188DATA_LENGTH
0x1DATA_TYPE
80x44C70F51CE5E60AA设备ID的HASH值
10x211DATA_LENGTH
0x2DATA_TYPE
10x11设备类型
60x3B5A61694F48蓝牙mac地址
AD Sturcture3:
Length10x09AD Type和AD Data字段的总长度
AD Type10xFF厂商自定义数据
AD Data20x7D02厂商id
60x4F532D463800beacon
AD Sturcture4:
Length10x10AD Type和AD Data字段的总长度
AD Type10x09设备简称
AD Data150x426C7565746F6F7468446576696365名称

9 设备连接

9.1 设备连接认证流程

设备连接认证流程图

9.2 BLE 连接

9.3 设备认证

9.3.1 无账号PIN认证

无账号PIN认证流程图

9.4 WiFi 连接

9.4.1 P2P连接

通过软总线在OpenSession时,选择.linkType[0] = LINK_TYPE_WIFI_P2P,由软总线自动建立p2p连接。

10 文件传输

10.1 传输协议

10.2 传输流程

传输流程图

10.3 图片传输

图片传输的流程如下:

图片传输流程图

建立图片传输会话时,会话类型为图片传输,并且在会话信息里需要带上图片和视频缩略图的base64编码。发送和接收端都在图片传输开始时显示图片和视频的缩略图。

10.3.1 单图片/视频传输

单图片传输时,会话和传输列表只包含一个文件。传输进度按文件发送的字节大小百分比计算,取整数。

10.3.2 多图片/视频传输

多图片传输时,会话和传输列表只包含多个文件,可以使图片和适配混合一起发送。传输进度按文件发送的字节大小百分比计算,取整数。

10.4.1 文件传输

文件传输的流程如下:

文件传输流程图

建立文件传输会话时,会话类型为文件传输,会话信息里缩略图字段为空。发送和接收端都在图片传输开始时显示文件列表。

10.4.1 单文件传输

单文件传输时,会话和传输列表只包含一个文件。传输进度按文件发送的字节大小百分比计算,取整数。

10.4.2 多文件传输

多文件传输时,会话和传输列表只包含多个文件。传输进度按文件发送的字节大小百分比计算,取整数。

10.5 文件目录传输

选择文件目录传输时,单次传输只能选择1个文件夹。取文件夹里的文件列表进行传输,当文件夹为空时,不允许传输,并且提示用户。传输进度按文件发送的字节大小百分比计算,取整数。

11 接口定义

此章节定义和描述文件分享SDK的NAPI相关接口,提供给应用层APP调用。

11.1. 创建文件分享管理实例

createShareManager(bundleName: string): ShareManager

创建文件分享管理实例。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.2. 释放文件分享管理实例

releaseShareManager(shareManager: ShareManager): void

释放文件分享管理实例,释放系统资源。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.3. 开启文件分享

ShareManager.enableShare(): void

Sink端开启文件分享能力,启动设备文件分享BLE广播,使设备可以被文件分享发现。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.4. 关闭文件分享

ShareManager.disableShare(): void

Sink端关闭文件分享能力,停止设备文件分享BLE广播,设备无法被文件分享发现。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.5. 获取文件分享状态

ShareManager.getShareStatus(): boolean

Sink端获取文件分享状态。

系统能力:

SystemCapability.Communication.Share

需要权限:

返回值:

类型说明
boolean文件共享状态。true 表示文件共享开启,false表示文件共享关闭。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.6. 开始扫描设备

ShareManager.startScan(): void

Source端开始扫描文件分享设备广播。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.7. 停止扫描设备

ShareManager.stopScan(): void

Source端停止扫描文件分享设备广播。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.8. 连接设备

ShareManager.connect(deviceId: string, bindParam: { [key: string]: Object },
callback: AsyncCallback<{ deviceId: string }>): void

Source端连接对端设备。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
deviceIdstring设备ID。
bindParamObject连接设备相关参数。
callbackAsyncCallback连接设备状态回调。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.9. 关闭连接

ShareManager.disconnect(deviceId: string): void

Source端取消设备连接。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
deviceIdstring设备ID。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.10. 接受文件分享连接

ShareManager.confirmConnect(): void

Sink端确认接受文件分享连接。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.11. 拒绝文件分享连接

ShareManager.refuseConnect(): void

Sink拒绝文件分享,终止文件分享流程。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.12. 发送文件

ShareManager.sendFile(deviceId: string, type: ShareType, files: Array): void

Source端发送文件内容。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
deviceIdstring设备ID。
typeShareType分享类型
filesArray文件信息数组

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.12. 取消发送文件

ShareManager.cancelSendFile(deviceId: string): void

Source端取消发送文件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
deviceIdstring设备ID。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.13. 终止接收文件

ShareManager.abortReceiveFile(deviceId: string): void

Sink端终止接收文件内容。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
deviceIdstring设备ID。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.14. 注册连接改变事件

ShareManager.on(type: 'connectionChange', callback: Callback<{

action: ShareDeviceStateChange;

device: ShareDeviceInfo;

}>): void

注册连接状态改变事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"connectionChange"字符串。
callbackCallback共享设备列表改变回调函数。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.15. 取消注册连接状态改变事件

ShareManager.off(type: 'connectionChange'): void

取消注册连接状态改变事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"connectionChange"字符串。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.16. 注册发现设备成功事件

ShareManager.on(type: 'discoverSuccess', callback: Callback<{

device: ShareDeviceInfo;

}>): void

注册发现设备成功事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"discoverSuccess"字符串。
callbackCallback发现设备成功回调函数。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.17. 取消注册发现设备成功事件

ShareManager.off(type: 'discoverSuccess'): void

取消注册发现设备成功事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"discoverSuccess"字符串。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.18. 注册发现设备失败事件

ShareManager.on(type: 'discoverFailure', callback: Callback<{

reason: number;

}>): void

注册发现设备失败事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"discoverFailure"字符串。
callbackCallback发现设备失败回调函数。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.19. 取消注册发现设备失败事件

ShareManager.off(type: 'discoverFailure'): void

取消注册发现设备失败事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"discoverFailure"字符串。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.20. 注册文件分享开关状态改变事件

ShareManager.on(type: 'shareStatusChange', callback: Callback): void

注册文件分享开关状态改变事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"shareStatusChange"字符串。
callbackCallback分享状态改变回调函数。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

11.21. 取消注册文件分享状态改变事件

ShareManager.off(type: 'shareStatusChange'): void

取消注册文件分享状态改变事件。

系统能力:

SystemCapability.Communication.Share

需要权限:

参数:

参数名类型必填说明
typestring固定填"shareStatusChange"字符串。

错误码:

错误码ID错误信息
201Permission denied.
202System API is not allowed called by Non-system application.
801Capability not supported.
2501000Operation failed.

http://www.kler.cn/a/578137.html

相关文章:

  • 用java如何利用jieba进行分词
  • STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步
  • 算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
  • 自执行函数(Self-Invoking Function)
  • Vue2使用jsts,将wkt转为geojson
  • 计算机网络篇:基础知识总结与基于长期主义的内容更新
  • 【问题解决】Jenkins使用File的exists()方法判断文件存在,一直提示不存在的问题
  • webshell一些上传心得
  • 代理IP与反爬技术的博弈
  • mysql经典试题共34题
  • UDP协议和报文格式
  • Redis | 哨兵 Sentinel
  • Java高频面试之集合-07
  • LeetCode 90: 子集 II
  • 【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等等)
  • Docker基础-项目部署流程解析
  • 07 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(一)
  • VUE3开发-9、axios前后端跨域问题解决方案
  • K8s 1.27.1 实战系列(三)安装网络插件
  • spring Web Mvc 介绍