【HarmonyOS NEXT】华为分享-碰一碰开发分享

server/2025/1/21 19:02:03/

关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit

华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 UI 进行设计。

目录

业务流程

预览效果

宿主设备开发

导入相关模块

定义碰一碰分享事件监听/取消监听方法

处理注册碰一碰分享监听/取消监听事件

配套分享卡片模板


业务流程

预览效果

宿主设备开发

宿主设备当进入可分享页面时,使用 harmonyShare.on() 方法注册碰一碰监听事件,当目标设备与宿主设备进行碰一碰操作后,宿主应用发现设备,调用碰一碰分享事件回调,在回调事件中构造分享数据并使用 sharableTarget.share() 发送。当宿主设备离开可分享页面(包括应用退至后台等场景)时,使用 harmonyShare.off() 方法取消碰一碰监听事件。

导入相关模块

import { uniformTypeDescriptor as utd } from '@kit.ArkData';
import { systemShare, harmonyShare } from '@kit.ShareKit';
import { fileUri } from '@kit.CoreFileKit';

定义碰一碰分享事件监听/取消监听方法

需要注意的是:收到碰一碰分享事件回调后,需尽快调用 sharableTarget.share() 方法发起分享,超过3秒可能会失败。

utd 选项参考链接:@ohos.data.uniformTypeDescriptor (标准化数据定义与描述)。

此处 utd 我选择的是超链接,目标设备接收后可直接跳转链接,当配合 AppLinking 时可实现跨设备打开 app 应用分享页。

/*** 碰一碰触发回调* @param sharableTarget*/
private immersiveCallback(sharableTarget: harmonyShare.SharableTarget) {const contextFaker: Context = getContext(this);let filePath = contextFaker.filesDir + '/exampleKnock1.jpg';let shareData: systemShare.SharedData = new systemShare.SharedData({utd: utd.UniformDataType.HYPERLINK,content: 'https://sharekitdemo.drcn.agconnect.link/ZB3p',// 根据title,description,thumbnailUri会生成不同的卡片模板。thumbnailUri: fileUri.getUriFromPath(filePath),title: '碰一碰分享卡片标题',description: '碰一碰分享卡片描述'});// 发起碰一碰分享sharableTarget.share(shareData);
}/*** 注册碰一碰分享监听事件*/
private immersiveListening() {harmonyShare.on('knockShare', this.immersiveCallback);
}/*** 取消碰一碰分享监听事件*/
private immersiveDisablingListening() {harmonyShare.off('knockShare', this.immersiveCallback);
}

处理注册碰一碰分享监听/取消监听事件

进入可分享页面时,注册碰一碰分享监听事件;离开可分享页面(包括应用退至后台等场景)时,取消碰一碰分享监听事件,避免与其他应用产生碰一碰数据传输冲突。

/*** 页面隐藏时取消碰一碰分享事件注册*/
onPageHide(): void {let context = getContext(this);context.eventHub.emit('onBackGround');
}/*** 组件加载时监听后台切换,应用在后台时取消碰一碰分享事件注册*/
aboutToAppear(): void {this.immersiveListening();let context = getContext(this);context.eventHub.on('onBackGround', this.onBackGround);
}/*** 组件销毁时监听后台切换,应用在后台时取消碰一碰分享事件注册*/
aboutToDisappear(): void {this.immersiveDisablingListening();let context = getContext(this);context.eventHub.on('onBackGround', this.onBackGround);
}/*** 调用取消碰一碰分享事件注册*/
private onBackGround() {this.immersiveDisablingListening();
}

配套分享卡片模板

为保证碰一碰分享用户体验,Share Kit支持三种卡片模板。

卡片模板类型

说明

效果图

纯图片布局

纯图片布局只包括预览图。

当分享数据为文件、图片等无需添加标题及描述的场景,推荐使用此卡片模板。

  • 使用方法:

    构造分享数据时,仅传递预览图(thumbnailUri)字段,即可生成此卡片模板。

  • 布局要求

    预览图:支持最小宽高比1:4,超出部分将被裁剪。

沉浸式大卡布局

沉浸式大卡布局包括预览图、标题、描述、应用图标。

当分享数据为链接类型时,需要向用户传递链接的内容,推荐使用此卡片模板。

  • 使用方法:需同时满足以下2个条件:

    1. 构造分享数据时,需同时传入标题(title)、描述(description)字段和预览图(thumbnailUri)字段。

    2. 预览图宽高比小于1:1。

  • 布局要求

    1. 预览图:支持最小宽高比1:4,超出部分将被裁剪。

    2. 标题:最大可显示2行,当文本超过2行时,未能正常在屏幕显示的文本用省略号代替。如果标题末尾有重要信息显示,需应用自行控制字数约20个中文左右。

    3. 描述:仅可显示1行,文本超过1行时,未能正常在屏幕上显示的文本用省略号代替。

    4. 应用图标:无需配置,系统将默认获取应用图标用于显示在卡片底部。

白卡上下布局

白卡上下布局包括预览图、标题、描述、应用图标。当分享数据为链接类型时,需要向用户传递链接的内容,推荐使用此卡片模板。

  • 使用方法:需同时满足以下2个条件:

    1. 构造分享数据时,需同时传入标题(title)、描述(description)字段和预览图(thumbnailUri)字段。

    2. 预览图宽高比大于1:1。

  • 布局要求

    1. 预览图:仅显示在卡片上方,不会铺满整个卡片。

    2. 标题:最大可显示2行,当文本超过2行时,未能正常在屏幕显示的文本用省略号代替。如果标题末尾有重要信息显示,需应用自行控制字数约20个中文左右。

    3. 描述:仅可显示1行,文本超过1行时,未能正常在屏幕上显示的文本用省略号代替。

    4. 应用图标:无需配置,系统将默认获取应用图标用于显示在卡片底部。


http://www.ppmy.cn/server/160262.html

相关文章

jenkins-视图管理

一. 简述; jenkins默认只有一个All的view, 在我们线上环境中(测试、预发布、线上、端、语言环境等),显然是不合理的(放在一个view中不编译管理)。我们可以通过一个dashboard view的插件来进行多个view(按环境,业务等分隔均可)管理…

wireshark 网络分析工具

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一、网络截获数据包的基础1、以太网…

前端调试【详解】含debugger,console,断点,手机真机调试等

Web 端 alert 调试 - 阻塞 【重要】debugger 调试 - 阻塞 https://blog.csdn.net/weixin_41192489/article/details/123872064 控制台 API 调试 https://blog.csdn.net/weixin_41192489/article/details/123872064 【重要】console 调试 https://blog.csdn.net/weixin_41…

【RAG落地利器】向量数据库Milvus教程:如何实现MetaData检索过滤

TrustRAG项目地址🌟:https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 环境依赖 安装 Docker 安装 Milvus Milvus 在 Milvus 存储库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus,只需运行 …

【Python】综合案例--人生重开模拟器

1. 设置初始属性 在游戏中我们设定四个属性.: 颜值 (face) 体质 (strong) 智力 (iq) 家境 (home)我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20. 如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入. print("-----------------------------------------…

河北省乡镇界面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移内容测评

本文将详细解析标题和描述中涉及的IT知识点,主要集中在地理信息系统(GIS)领域,特别是与ArcGIS软件、SHP文件格式以及WGS84坐标系相关的内容。 我们来了解一下“乡镇界面图层”。这是一个地理信息数据集,包含了河北省各…

Gin 源码概览 - 路由

本文基于gin 1.1 源码解读 https://github.com/gin-gonic/gin/archive/refs/tags/v1.1.zip 1. 注册路由 我们先来看一段gin代码,来看看最终得到的一颗路由树长啥样 func TestGinDocExp(t *testing.T) {engine : gin.Default()engine.GET("/api/user", f…

性能优化之动态加载

在过去近三十年的职业生涯里,有几年专注于运行时环境的开发与实现。在runtime中,动态加载技术是其中的基石之一。动态加载技术是指在系统运行过程中,根据需要把程序和数据从外存或网络加载到内存中的过程。其中,lazy loading&…