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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统编程--线程同步

目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念&#xff0c;为了防止多个线程同时访问一份临界资源而出问题&#xff0c;我们引入了线程互斥&#xff0c;线程互斥其实…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

# 深入理解RNN(一):循环神经网络的核心计算机制

深入理解RNN&#xff1a;循环神经网络的核心计算机制 RNN示意图 引言 在自然语言处理、时间序列预测、语音识别等涉及序列数据的领域&#xff0c;循环神经网络(RNN)一直扮演着核心角色。尽管近年来Transformer等架构逐渐成为主流&#xff0c;RNN的基本原理和思想依然对于理…

深度学习实战车道线检测

深度学习实战车道线检测 这里写目录标题 车道线原理整体架构设计核心原理步骤1. 特征提取&#xff08;骨干网络&#xff09;2. 特征融合3. 车道线表示与分类4. 损失函数5. 后处理 速度优势的来源 软件实现安装环境与文件说明实验测试 结束语 车道线原理 Lane - Detection是一种…

【redis】五种数据类型和编码方式

文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串&#xff1a;Java 中的 String哈希&#xff1a;Java 中的 HashMap列表&#xff1a;Java 中的 List集合&#xff1a;Java 中的 Set有序集合&#xff1a;除了存 member 之外&#xff0c;还有…

Next.js Server Action 提交 vs 前端 Fetch 提交:核心区别与优劣分析

在使用 Next.js 开发时&#xff0c;开发者经常会面临一个问题&#xff1a;前端的数据提交应该直接 Fetch 调用 API 还是使用 Next.js 提供的 Server Action 提交&#xff1f; 本文将深度解析&#xff1a; ✅ Server Action 提交数据的工作原理✅ 前端 Fetch 提交数据的优缺点…

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…

混合存储HDD+SSD机型磁盘阵列,配上SSD缓存功能,性能提升300%

企业日常运行各种文件无处不在&#xff0c;文档、报告、视频、应用数据......面对成千上万的文件&#xff0c;团队之间需要做到无障碍协作&#xff0c;员工能够即时快速访问、共享处理文件。随着业务增长&#xff0c;数字化办公不仅需要大容量&#xff0c;快速高效的文件访问越…

【AI】什么是Embedding向量模型?我们应该如何选择?

我们之前讲的搭建本地知识库,基本都是使用检索增强生成(RAG)技术来搭建,Embedding模型则是RAG的核心,同时也是大模型落地必不可少的技术。那么今天我们就来聊聊Embedding向量模型: 一、Embedding模型是什么? Embedding模型是一种将离散数据(如文本、图像、用户行为等)…

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…

【Python 数据结构 8.串】

目录 一、串的基本概念 1.串的概念 2.获取串的长度 3.串的拷贝 4.串的比较 5.串的拼接 6.串的索引 二、Python中串的使用 1.串的定义 2.串的拼接 3.获取串的长度 4.获取子串位置 5.获取字符串的索引 6.字符串的切片 7.字符串反转 8.字符串的比较 9.字符串的赋值 三、实战 1.344…

计算机视觉cv2入门之图像的读取,显示,与保存

在计算机视觉领域&#xff0c;Python的cv2库是一个不可或缺的工具&#xff0c;它提供了丰富的图像处理功能。作为OpenCV的Python接口&#xff0c;cv2使得图像处理的实现变得简单而高效。 示例图片 目录 opencv获取方式 图像基本知识 颜色空间 RGB HSV 图像格式 BMP格式 …

LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)

文章目录 LLM 学习&#xff08;二 完结 Multi-Head Attention、Encoder、Decoder&#xff09;Self-Attention &#xff08;自注意力机制&#xff09;结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMasked 操作Teacher Fo…

006-获取硬件序列号

获取硬件序列号 我将从跨平台角度系统讲解如何通过C获取硬件序列号的核心技术&#xff0c;并提供可移植性代码实现。 一、处理器序列号获取 Windows平台 #include <windows.h> #include <intrin.h>std::string GetCPUSerial_Win() {DWORD cpuInfo[2] { 0 };__c…

GDB调试技巧:多线程案例分析(保姆级)

在软件开发的复杂世界里&#xff0c;高效的调试工具是解决问题的关键利器。今天&#xff0c;我们将深入探讨强大的调试工具 ——GDB&#xff08;GNU Debugger&#xff09;。GDB 为开发者提供了一种深入程序内部运行机制、查找错误和优化性能的有效途径。让我们一同开启 GDB 的调…

OSPF的各种LSA类型,多区域及特殊区域

一、OSPF的LSA类型 OSPF&#xff08;开放最短路径优先&#xff09;协议使用多种LSA&#xff08;链路状态通告&#xff09;类型来交换网络拓扑信息。以下是主要LSA类型的详细分类及其作用&#xff1a; 1. Type 1 LSA&#xff08;路由器LSA Router LSA&#xff09; 生成者&…

JavaScript系列06-深入理解 JavaScript 事件系统:从原生事件到 React 合成事件

JavaScript 事件系统是构建交互式 Web 应用的核心。本文从原生 DOM 事件到 React 的合成事件&#xff0c;内容涵盖&#xff1a; JavaScript 事件基础&#xff1a;事件类型、事件注册、事件对象事件传播机制&#xff1a;捕获、目标和冒泡阶段高级事件技术&#xff1a;事件委托、…

字节跳动C++客户端开发实习生内推-抖音基础技术

智能手机爱好者和使用者&#xff0c;追求良好的用户体验&#xff1b; 具有良好的编程习惯&#xff0c;代码结构清晰&#xff0c;命名规范&#xff1b; 熟练掌握数据结构与算法、计算机网络、操作系统、编译原理等课程&#xff1b; 熟练掌握C/C/OC/Swift一种或多种语言&#xff…

MySQL进阶-关联查询优化

采用左外连接 下面开始 EXPLAIN 分析 EXPLAIN SELECT SQL_NO_CACHE * FROM type LEFT JOIN book ON type.card book.card; 结论&#xff1a;type 有All ,代表着全表扫描&#xff0c;效率较差 添加索引优化 ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】&#xff0…

ai之qwq 32B部署在 linux 与拓展使用在web参考

linux部署 Linux 命令行&#xff1a; curl -fsSL https://ollama.com/install.sh | sh2 将Ollama设置为系统启动时自动运行&#xff08;建议&#xff09; 创建系统用户和用户组 sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollamasudo usermod -a -G ollama $…