鸿蒙实战开发-如何通过跨端迁移实现一个随手记应用

​介绍

本示例主要展示了应用数据跨端迁移的能力,通过跨端迁移的能力实现了一个简单的随手记应用,可以响应系统迁移事件,控制应用的迁移能力、是否迁移页面栈以及迁移后是否退出源端等。同时实现了数据迁移以及ArkUI控件的迁移。本示例仅适配设备类型为phone。

本示例使用了权限管理接口@ohos.abilityAccessCtrl、分布式数据对象接口@ohos.data.distributedDataObject、基础文件操作接口@ohos.file.fs 、相册管理模块接口@ohos.file.photoAccessHelper、图片处理接口@ohos.multimedia.image等接口,通过分布式数据对象以及分布式文件两种方式实现了图片数据的流转迁移。

效果预览

在这里插入图片描述
使用说明

  1. 启动应用,进入欢迎页,点击允许授权;
  2. 进入主页,点击右上角设置图标进入迁移设置页面,可以设置当前应用是否具备迁移能力、是否迁移页面栈以及迁移后是否退出源端;
  3. 进入主页,可以点击笔记页、待办事项、图片墙等按钮进入对应页面;
  4. 在笔记页,可以编辑笔记标题、笔记内容、选择图片,在打开迁移能力和迁移页面栈的情况下,所编辑的内容和选择的图片可以同步迁移到对端设备;
  5. 在待办事项页,勾选多选框,在打开迁移能力和迁移页面栈的情况下,可以迁移当前的勾选状态;
  6. 在图片墙页,滑动页面到某个位置,在打开迁移能力和迁移页面栈的情况下,可以迁移当前的瀑布流控件索引位置。
  7. 点击“迁移时使用异步接口保存数据”,进入页面输入文本,可以迁移文本数据(RK3568设备不支持)。

工程目录

entry/src/main/ets/
|---common
|   |---bean
|   |   |---WaterFlowDataSource.ets       //瀑布流组件加载数据对象
|   |---constants
|   |   |---CommonConstants.ets           // 常量
|   |---img
|---entryability
|   |---EntryAbility.ets
|---pages
|   |---Home.ets                          // 主页
|   |---ImgWall.ets                       // 图片墙页
|   |---Index.ets                         // 欢迎页
|   |---Notes.ets                         // 笔记页
|   |---Settings.ets                      // 迁移设置页
|   |---Todolist.ets                      // 待办事项页
|---utils                                 
|   |---Logger.ts                         // 日志工具
|---viewmodel                                 
|   |---MainViewModel.ets                 // 获取轮播图数据

具体实现

  • 在端端迁移随手记应用里,迁移设置的功能在Setting.ets和entryability中的onContinue()实现,通过UIAbilityContext的setMissionContinueState可以设置当前应用任务流转的状态,控制当前应用是否具有迁移能力。通过设置wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY和wantConstant.Params.SUPPORT_CONTINUE_SOURCE_EXIT_KEY的值可以控制当前应用是否迁移页面栈以及迁移后源端是否退出。
  • 笔记页通过分布式数据对象和分布式文件在Notes.ets中实现大文件(100KB以上)数据的迁移。通过分布式文件的跨设备文件访问实现了图片的迁移。
  • 获取分布式目录的文件路径filePath:context.distributedFilesDir+‘picture.jpg’,迁移图片文件使用.jpg来命名;
  • 从图库中选择图片,使用选择器接口@ohos.file.picker的PhotoViewPicker图库选择器对象选择一张图片并通过writeSrcToDistributedFile(this.uris)将选择的图片的uri写入分布式文件路径filePath。
  • 使用getImage()方法获取从图库中选择的图片资源PixelMap类型,首先使用photoAccessHelper.getPhotoAccessHelper(context)获取相册管理模块的实例,使用phAccessHelper.getAssets()获取图片资源,使用photoAsset.getThumbnail()获取所选的图片的PixelMap类型数据,接口参考:ohos.file.photoAccessHelper。
  • 在对端设备上迁移显示笔记页内容时,在aboutToAppear()钩子中调用readFromDistributedFile()读取分布式路径里存储的图片文件,首先以同步方法fs.accessSync(filePath)检查分布式路径下文件是否存在,通过image.createImageSource(filePath)传入的uri创建图片源实例imageSourceApi,通过imageSourceApi.createPixelMap()来创建PixelMap
    并负责流转后展示 。
  • 通过restoreId()实现ArkUI控件保存对应信息的迁移

相关权限

允许不同设备间的数据交换:ohos.permission.DISTRIBUTED_DATASYNC

允许读取用户公共目录的图片或视频文件: ohos.permission.READ_IMAGEVIDEO

依赖

不涉及

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568;

2.本示例完整功能必须双端授予允许使用分布式协同能力,迁移等功能暂不支持RK3568。

3.本示例为stage模型,已适配API version 12版本SDK,SDK版本号(API Version 12 Release),镜像版本号(5.0.0.16)。

4.本示例需要使用DevEco Studio 版本号(4.0Release)才可编译运行。

5.本示例需要使用 ohos.permission.READ_IMAGEVIDEO权限级别为system_basic的系统接口。

6.本示例涉及系统接口,需要配置系统应用签名,可以参考特殊权限配置方法 ,把配置文件中的“app-feature”字段信息改为“hos_system_app”。

下载

git init
echo code/SuperFeature/DistributedAppDev/DistributedJotNote/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

如需单独下载本工程,执行如下命令:
为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→https://qr21.cn/FV7h05

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述
在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF: 获取完整版白皮书方式请点击→https://qr21.cn/FV7h05

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看→https://qr21.cn/FV7h05

1.应用开发导读(ArkTS)
2………
在这里插入图片描述

二、HarmonyOS 概念→https://qr21.cn/FV7h05

1.系统定义
2.技术架构
3.技术特性
4.系统安全
5.…在这里插入图片描述

三、如何快速入门?→https://qr21.cn/FV7h05

1.基本概念
2.构建第一个ArkTS应用
3………在这里插入图片描述

四、开发基础知识→https://qr21.cn/FV7h05

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……在这里插入图片描述

五、基于ArkTS 开发→https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册》https://qr21.cn/FV7h05

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.2 JavaWeb Day05分层解耦

三层架构功能 controller层接收请求,响应数据,层内调用了service层的方法,service层仅负责业务逻辑处理,其中要获取数据,就要去调用dao层,由dao层进行数据访问操作去查询数据(进行增删改查&…

备份 0__0

数据备份的重要性: 备份的主要目的是灾难恢复;在生产环境中,数据的安全性至关重要;任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误;人为操作错误;运算错误;…

【微信小程序】流量主-激励视频(激励广告)下发策略,每天三次免费体验,然后再次点击触发激励视频,当日不再触发。

如题: 允许用户有三次体验效果,然后弹出激励视频弹窗,之后当日不再弹出。 体验小程序: /*** 判断当前项目当天是否点击超过3次,触发广告效果。* 若,当天低于三次,则新增,若高于…

鸿蒙原OS开发实例:【ArkTS类库单次I/O任务开发】

Promise和async/await提供异步并发能力,适用于单次I/O任务的场景开发,本文以使用异步进行单次文件写入为例来提供指导。 实现单次I/O任务逻辑。 import fs from ohos.file.fs; import common from ohos.app.ability.common;async function write(data:…

Mysql的MHA高可用集群部署及故障切换

目录 一、MHA概念 1、MHA的组成 2、MHA的特点 二、搭建MysqlMHA 1、实验思路 1.1 MHA架构 1.2 故障模拟 2、实验环境、安装包 3、服务搭建 3.1 所有服务器,关闭系统防火墙和安全机制 3.2 修改master (192.168.170.111)、slave1&am…

视频监控/云存储/AI智能分析平台EasyCVR集成时调用接口报跨域错误的原因

EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标G…

GS1-全球分类标准

GS1 GS1是一个中立的全球合作平台,汇集行业领袖、政府、监管机构、学术界和协会,共同开发基于标准的解决方案,以应对数据交换的挑战。我们的规模和影响力——遍布 116 个国家/地区的当地会员组织、超过 200 万家用户公司和每天 100 亿笔交易—…

C++入门:命名空间namespace,cin,cout,缺省参数,函数的重载

namespace本质上是定义了一个命名空间域 通过创建命名空间域可以预防变量的冲突问题 命名冲突时,编译器会首先从局部中找,然后从全局中找,但是不会从命名空间中找 eg. ::符号和命名空间 :: 是域作用限定符 就可以访问namespace bit中的rand了,否则就默认找局部或全局的ran…

瑞吉外卖实战学习--11、分类管理的列表分页查询

分类管理的列表分页查询 前言1、创建接口2、基于分页组件来实现的 前言 通过前端接口可以看到请求和传递的参数&#xff0c;本文章是基于mybatisPlus的分页插件来实现的 1、创建接口 GetMapping("/page")public R<Page> page(int page,int pageSize){ // …

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目&#xff0c;好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作&#xff01; 我曾经在Grab工作&#xff0c;这是东南亚的一家共享出行公司&#xff0c;但我对工作感到沮丧&#xff0c;想要进入FAANG公司&#xff0c;但我…

分布式唯一ID 雪花算法

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 算法具体介绍 雪花算法是 64 位 的二进制&#xff0c;一共包含了四部分&#xff1a; 1位是符号位&#xff0c;也就是最高位&#xff0c;…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中&#xff0c;工具--获取工具与功能。 2. 安装图中工具&#xff0c;原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示&#xff1a; 4 在unity中运行游戏&#xff0c;vs这边确实成功断住了&#xff01;