43 短距通信场景汇总:NFC / 二维码 / 剪贴板 / 超级终端

前言

在这里插入图片描述

图:43 短距通信场景汇总:NFC / 二维码 / 剪贴板 / 超级终端 运行效果截图(HarmonyOS NEXT)

至此,第六模块已覆盖了"鹿鹿·笔迹心理分析"App 中所有的短距通信方式:

短距通信方式全景示意图

图:鸿蒙短距通信4种方式——NFC/二维码/剪贴板/超级终端的使用场景对比

短距通信场景

NFC 碰一碰
< 4cm 双人绑定

二维码扫描
关系绑定备选方案

剪贴板分享
文字链接复制

超级终端
跨设备流转

BindRelationPage

TapSharePage

SharePage

ContinuationAbility

文章 技术 核心 API 页面
第 39 篇 NFC 碰一碰 UI 脉冲动画 + 邀请状态机 TapSharePage / BindRelationPage
第 40 篇 NFC Tag 读写 @kit.ConnectedTagKit / tag / nfcController 蓝图层
第 41 篇 二维码生成与扫描 @kit.ScanKit / image.createQRImage TapSharePage / BindRelationPage
第 42 篇 图片分享(pasteboard) @kit.BasicServicesKit / pasteboard SharePage / MetaServiceCard

本文作为第六模块的收官篇,对以上四种短距通信方式进行横向对比汇总,帮助读者在实际项目中做技术选型。

鸿蒙官方·NFC 开发指南:developer.huawei.com
项目源码仓库:harmony-app GitHub

一、四种方式总览

1.1 在项目中的角色定位

┌─────────────────────────────────────────────────────────────┐
│                    鹿鹿 App · 短距通信生态                     │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐  │
│  │  NFC      │   │  QR Code │   │pasteboard│   │超级终端   │  │
│  │  碰一碰   │   │  扫一扫  │   │ 剪贴板   │   │ 推送     │  │
│  ├──────────┤   ├──────────┤   ├──────────┤   ├──────────┤  │
│  │物理接触   │   │视觉对准   │   │ 一键复制  │   │ 网络推送  │  │
│  │0-4cm     │   │ 0-50cm   │   │ 即时     │   │ 远程     │  │
│  │不需要看屏 │   │ 需要看屏  │   │ 需要手动  │   │需要登录   │  │
│  └──────────┘   └──────────┘   └──────────┘   └──────────┘  │
│       │               │              │              │        │
│       ▼               ▼              ▼              ▼        │
│  ┌─────────────────────────────────────────────────────┐     │
│  │           目标:分享笔迹分析 / 绑定关系              │     │
│  └─────────────────────────────────────────────────────┘     │
└─────────────────────────────────────────────────────────────┘

1.2 关键技术栈

方式 鸿蒙 Kit 核心模块 需要硬件
NFC 碰一碰 @kit.ConnectedTagKit @ohos.nfc.tag, @ohos.nfc.controller NFC 芯片
二维码扫描 @kit.ScanKit scanCore.createScanEngine 后置/前置摄像头
二维码生成 @kit.ImageKit image.createQRImage 无(纯软件)
剪贴板 @kit.BasicServicesKit pasteboard.getSystemPasteboard
超级终端推送 系统能力 系统分布式软总线 华为账号

二、横向对比

2.1 传输特性对比

对比维度 NFC 碰一碰 扫二维码 剪贴板 超级终端推送
传输距离 0-4cm 0-50cm N/A 不限(网络)
传输方向 双向(读写) 单向(被扫) 单向(写) 双向
传输速度 ~106-424 kbps 视觉识别 ≈1s 即时 网络速度
是否需要屏幕 ❌ 不需要 ✅ 需要(扫码者) ✅ 需要 ✅ 需要
是否需要网络 ❌ 不需要 ❌ 不需要 ❌ 不需要 ✅ 需要
数据容量 NDEF 最大 ~8KB 二维码 ~3KB 剪贴板不限 不限
耗电量 中(摄像头) 极低 中(网络)
响应延迟 ~500ms ~1-2s ~100ms ~1-3s

2.2 用户体验对比

场景 NFC 二维码 剪贴板 超级终端
面对面突然想分享 ⭐⭐⭐ 背靠背即可 ⭐⭐ 需要取景框 ⭐ 需要手动粘贴 ⭐ 需要网络
线下海报扫码 ❌ 无法使用 ⭐⭐⭐ 经典场景 ❌ 无法使用 ❌ 无法使用
快速复制内容 ⭐⭐⭐ 最直接 ⭐⭐
远程给朋友发报告 ⭐⭐ 截图发送 ⭐ 需要对方粘贴 ⭐⭐⭐ 直接推送
老人/非鸿蒙设备 ⭐⭐⭐ 扫码通用 ⭐⭐⭐ 文字通用

2.3 安全性对比

安全维度 NFC 二维码 剪贴板 超级终端
中间人攻击风险 极低(近距离) 中(可能被替换) 低(系统管控) 低(加密通道)
数据是否可嗅探 极低 可被他人扫描 可被其他 App 读取
是否需要用户确认 ✅ 主动靠近 ✅ 主动扫码 ✅ 主动复制 ✅ 主动推送
数据时效性 实时 可设置过期 即时 即时
防篡改 天然(物理接触) 可伪造 不可篡改 加密传输

三、技术实现对比

3.1 代码量对比

方式 核心代码行数 关键 API 调用数 集成难度
NFC 碰一碰 UI ~80 行(脉冲动画) 3(State + animateTo + setTimeout) ⭐ 低
NFC Tag 读写 ~120 行 8(tag.on/connect/readNdef/writeNdef…) ⭐⭐⭐ 高
二维码扫描 ~100 行 5(createScanEngine/on/start/stop/release) ⭐⭐ 中
二维码生成 ~40 行 3(createQRImage/getPixelMap/packing) ⭐ 低
pasteboard 剪贴板 ~20 行 3(createData/getSystemPasteboard/setData) ⭐ 极低
超级终端推送 ~30 行 2(pushViaSuperTerminal + Toast) ⭐ 低(模拟)

3.2 核心代码片段

NFC Tag 读写(最复杂,需要状态管理):

// @kit.ConnectedTagKit
import { tag, nfcController } from '@kit.ConnectedTagKit'

const MAX_TRIES = 3

async function handleNfcShare(): Promise<void> {
  if (!nfcController.isNfcOpen()) {
    // 提示用户开启 NFC
    return
  }

  tag.on('tagDiscovery', async (tagInfo) => {
    const ndefTag = tag.getNdefTag(tagInfo)
    if (!ndefTag) return
    try {
      ndefTag.connect()
      const records: tag.NdefRecord[] = [
        {
          tnf: 0x04,
          type: stringToBytes('lulu.com:share'),
          id: [],
          payload: stringToBytes(buildSharePayload())
        }
      ]
      ndefTag.writeNdef(records)
      ndefTag.close()
    } catch (e) {
      hilog.error(0x0000, 'Nfc', '写入失败: %{public}s', JSON.stringify(e))
    }
  })
}

二维码扫描(中等复杂度):

// @kit.ScanKit
import { scanCore } from '@kit.ScanKit'

const config: scanCore.ScanConfig = {
  scanTypes: [scanCore.ScanType.QR_CODE],
  scanMode: scanCore.ScanMode.CAMERA
}
const engine = scanCore.createScanEngine(context, config)
engine.on('scanResult', (result: scanCore.ScanResult) => {
  handleScanContent(result.originalValue)
})

pasteboard 剪贴板(最简单的分享):

// @kit.BasicServicesKit
import { pasteboard } from '@kit.BasicServicesKit'

const data = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, '分享内容')
await pasteboard.getSystemPasteboard().setData(data)

二维码生成(Image Kit 一行调用):

// @kit.ImageKit
import { image } from '@kit.ImageKit'

const qrImage = image.createQRImage({
  content: 'lulu://share?userId=1',
  size: 200
})
const pixelMap = await qrImage.getPixelMap()

四、多通道策略设计

4.1 自动降级链

在实际项目中,NFC 不一定在所有设备上都可用。项目采用自动降级策略

/**
 * 分享方式自动选择
 *
 * 优先级链:
 *   ① NFC Tag(两台设备均支持 NFC + 开启)
 *       ↓ 不支持
 *   ② 二维码(扫一扫)
 *       ↓ 不方便扫码
 *   ③ 超级终端(需要网络 + 双方鸿蒙设备)
 *       ↓ 非鸿蒙设备
 *   ④ 剪贴板(通用方案,所有设备可用)
 */
function determineShareMethod(deviceInfo: DeviceInfo): ShareMethod {
  if (deviceInfo.hasNfc && nfcController.isNfcOpen()) {
    return ShareMethod.NFC       // 优先 NFC
  }
  if (deviceInfo.hasCamera) {
    return ShareMethod.QR_CODE  // 其次扫码
  }
  if (deviceInfo.isConnected) {
    return ShareMethod.SUPER_TERMINAL  // 再推送
  }
  return ShareMethod.CLIPBOARD  // 最后剪贴板兜底
}

4.2 BindRelationPage 的三级入口

关系绑定页提供了三种方式并列选择:

// 三种方式并列,用户按需选择
this.methods = [
  { key: 'tap',    title: '碰一碰邀请', ... },  // NFC
  { key: 'qrcode', title: '扫一扫二维码', ... }, // 扫码
  { key: 'id',     title: '输入鹿鹿 ID', ... },  // 手动输入
]

4.3 TapSharePage 的双按钮布局

// NFC 为主,二维码和超级终端为备选
Row() {
  Button('生成二维码')      // → 备选一
  Button('超级终端推送')     // → 备选二
}

五、项目中的完整短距通信链路

5.1 数据流转

┌──────────────┐
│  AI 分析结果   │ ← 笔迹分析 + 情绪分类
└──────┬───────┘
       │
       ├──→ NFC Tag ──────→ 碰一碰分享(实时面对面)
       │
       ├──→ 二维码 ────────→ 扫一扫获取(线下/线上)
       │
       ├──→ 剪贴板 ────────→ 粘贴发送(通用)
       │
       └──→ 超级终端 ──────→ 推送设备(远程)

5.2 涉及的页面与 API

页面 使用的通信方式 涉及 Kit
CapturePage 拍照 → 存储(前置) Camera Kit / CoreFileKit
AnalyzingPage 分析结果 → 触发分享 AI 流水线
ReportDetailPage 分享入口 → SharePage Router
SharePage pasteboard 剪贴板 + 海报 BasicServicesKit
TapSharePage NFC UI + 二维码 + 超级终端 ConnectedTagKit / ScanKit / ImageKit
BindRelationPage 碰一碰 + 扫码 + ID 输入 ConnectedTagKit / ScanKit
MetaServiceCard 元服务 + 剪贴板 BasicServicesKit
PosterTemplate 海报中的二维码占位 ArkUI 组件

5.3 涉及的鸿蒙 Kit 一览

Kit 名称 用途 文章编号
@kit.CameraKit 拍照取景 34、35
@kit.MediaLibraryKit 相册选择 37
@kit.ImageKit 图片解码 + 二维码生成 36、41
@kit.CoreFileKit 文件操作与存储 36、38
@kit.ConnectedTagKit NFC Tag 发现与读写 39、40
@kit.ScanKit 二维码扫描 41
@kit.BasicServicesKit 剪贴板 pasteboard 42

六、项目中的短距通信全景图

6.1 场景矩阵

                       面对面        远程
                    ┌─────────┬──────────┐
         鸿蒙设备    │ NFC     │ 超级终端  │
                    │ 碰一碰   │ 推送      │
                    ├─────────┼──────────┤
         跨平台      │ 二维码   │ 剪贴板   │
                    │ 扫一扫   │ 复制粘贴  │
                    └─────────┴──────────┘

6.2 用户体验决策树

用户想分享笔迹分析报告
   │
   ├─ 对方在身边?
   │   ├─ 同是鸿蒙设备 → 碰一碰 NFC ⭐
   │   └─ 安卓/iOS → 让对方扫二维码 ⭐
   │
   ├─ 对方不在身边?
   │   ├─ 鸿蒙设备 + 在线 → 超级终端推送 ⭐
   │   └─ 其他 → 复制链接发消息 ⭐
   │
   └─ 想要留作纪念?
       └─ 保存海报到相册 ⭐

6.3 项目当前实现状态

通信方式 实现状态 UI 实际通信 备注
NFC 碰一碰动画 ✅ 已完成 ✅ 三层波纹脉冲 ❌ 模拟 Tag 需要真机调试
NFC Tag 读写 蓝图 ❌ 未实现 🔧 API 就绪 需要 NDEF 格式
二维码生成 ✅ 已完成 ❌ 未展示 ✅ API 示例 createQRImage 可用
二维码扫描 蓝图 ❌ 未实现 🔧 API 就绪 ScanKit 可用
pasteboard 剪贴板 ✅ 已完成 ✅ 复制按钮 ✅ 实际操作 生产可用
保存海报到相册 ✅ 模拟 ✅ 网格入口 ❌ 模拟 需 MediaLibraryKit
超级终端推送 ✅ 模拟 ✅ UI 按钮 ❌ 模拟 需系统能力

七、开发建议与最佳实践

7.1 技术选型建议

/**
 * 不同应用场景的短距通信选型建议
 *
 * 社交分享 App(如本项目):
 *   NFC    → 碰一碰交友/分享(需要硬件支持)
 *   二维码  → 邀请码/报告分享(通用性最强)
 *   剪贴板  → 快速复制分享链接(兜底方案)
 *
 * 支付/票务 App:
 *   NFC    → 碰一碰支付(主方案)
 *   二维码  → 扫码支付/取票(备选)
 *
 * 办公/协作 App:
 *   超级终端 → 跨设备文件传输(鸿蒙生态)
 *   二维码  → 会议邀请/签到
 *   剪贴板  → 快速传文字/链接
 */

7.2 多通道策略原则

原则 说明
首选最便捷的方式 NFC > 二维码 > 超级终端 > 剪贴板
备选降级方案 当首选方式不可用时的自动降级
用户可主动选择 提供并列入口,尊重用户偏好
统一数据协议 NFC、二维码、ID 输入使用相同的 lulu:// 协议格式
隐私优先 短距通信中只传递引用 ID,不传敏感数据

7.3 测试注意事项

/**
 * 短距通信测试清单
 *
 * NFC:
 *   □ 真机测试(模拟器不支持 NFC)
 *   □ 不同距离(2cm / 4cm / 超出范围)
 *   □ NFC 开启/关闭状态切换
 *   □ 多标签环境(防冲突)
 *
 * 二维码:
 *   □ 不同光照条件下的识别率
 *   □ 不同尺寸二维码(小码识别能力)
 *   □ 损坏/扭曲二维码的容错率
 *   □ 扫码后结果正确处理
 *
 * 剪贴板:
 *   □ 写入后立即读取验证
 *   □ 特殊字符(emoji、中文、换行符)
 *   □ 超长文本截断
 *   □ 其他 App 覆盖剪贴板后的状态
 */

八、第六模块回顾

8.1 文章内容回顾

编号 标题 主题
34 Camera Kit 相机接入 权限管理 + CameraManager 初始化
35 拍照流程实现 CaptureSession + PhotoOutput
36 图像预处理与裁剪 PixelMap 解码 + resize + crop
37 相册读取 PhotoViewPicker + PhotoSelectOptions
38 图片压缩与存储 ImagePacker + fileIo
39 NFC 碰一碰 UI 脉冲动画 + 邀请状态机
40 NFC Tag 读写 NDEF + tag.onDiscovery
41 二维码生成与扫描 ScanKit + createQRImage
42 图片分享 pasteboard + Grid 渠道
43 短距通信汇总 横向对比 + 选型建议

8.2 涉及的鸿蒙 Kit

Camera Kit    → 拍照
MediaLibraryKit → 相册
ImageKit      → 图片编解码 + 二维码生成
CoreFileKit   → 文件存储
ConnectedTagKit → NFC
ScanKit       → 二维码扫描
BasicServicesKit → 剪贴板

九、注意事项与常见问题

9.1 开发注意事项

在正式开发前,建议按以下步骤完成环境准备与前置检查:

  1. 版本确认:检查 DevEco Studio 与 SDK 版本,确保满足目标 API Level 要求
  2. 权限声明:在 module.json5requestPermissions 字段中提前声明所有需要的系统权限
  3. 设备能力检查:调用前验证设备是否支持目标能力(相机、NFC、传感器等)
  4. 异步封装:所有耗时操作(数据库、文件 I/O、网络请求)统一使用 async/await 处理
  5. 资源释放:在组件 aboutToDisappear() 生命周期钩子中及时释放系统资源,防止内存泄漏

9.2 常见错误与解决方案

常见问题快速排查表:

问题类型 排查方向 参考方法
应用崩溃 查看 hilog 错误日志 hilog.error(TAG, "...", e.message)
状态丢失 检查 AppStorage 键名拼写 统一使用常量管理键名
动画不流畅 避免在 animateTo 回调中执行 I/O 动画与数据操作分离

总结

本文全面介绍了 43 短距通信场景汇总:NFC / 二维码 / 剪贴板 / 超级终端 的核心知识与实战技巧。从基础概念到完整实现,每个环节都紧密结合 HarmonyOS NEXT 的实际开发场景,为构建高质量的鸿蒙应用奠定了坚实基础。

希望本文能为你的鸿蒙开发之旅提供有价值的参考,欢迎收藏备用,下一篇将继续深入探讨相关进阶主题。

下一模块将进入 Canvas 高级绘图,覆盖雷达图、折线图、匹配圆环等数据可视化组件。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


参考资源:

  • NFC 开发概述
  • Scan Kit 开发概述
  • pasteboard API 参考
  • 超级终端开发指南
  • [TapSharePage 项目源码](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/TapSharePage.ets)
  • [BindRelationPage 项目源码](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/BindRelationPage.ets)
  • [SharePage 项目源码](file:///Users/fiona/Downloads/bijixinli/harmony-app/entry/src/main/ets/pages/SharePage.ets)
  • [第六模块全部十篇文章目录](file:///Users/fiona/Downloads/bijixinli/harmony-app/articles/)
  • HarmonyOS 开发文档
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐