大家好!!欢迎您来到51CTO鸿蒙专区。我是董昱。很荣幸成为HarmonyOS系统课程开发者。

这里我给大家介绍一下HarmonyOS应用程序流转的实现。

本文中的内容有视频版哦。在我在51CTO中首发了我的最新免费的视频教程《精讲鸿蒙应用程序开发》就有相关的内容。

下面进入正题:

==========================

1 什么是应用程序的协同和流转?

首先,什么是应用程序的流转和协同呢?

应用流转和协同是鸿蒙操作系统分布式的重要体现。这里面涉及两个概念:协同:在多个设备上同时运行同一个应用程序。用户在多个设备的支持下进行同一工作任务。

流转:一个应用程序在某一个设备上运行时,因用户需要切换到到另外一个上继续运行,同时在原来的设备上停止运行。流转包括迁移(Migrate)和迁回两个层面。

如果文字上读起来困难的话,可以看看下面的例子:

如果我正在用设备A写邮件,但是设备A快没电了,我就可以将这个界面从设备A流转到设备B上,此时界面中我已经输入的邮件信息都没有丢失和变化。这个过程称为流转:

流转包括了迁移和迁回两个层面。

这个特性有点类似于苹果的应用接力,已经不是非常新鲜的事情了。但是鸿蒙的分布式特性还是存在两点特别的优势:

(1)苹果的应用接力开发非常繁琐。鸿蒙的流转却非常简单,易学。

(2)苹果设备的接力难以实现协同功能。

那么什么是协同呢?

例如,我用手机看新闻列表,用智慧屏浏览新闻。而手机上和智慧屏上都运行着同样一个应用程序,如下图所示。

这里要注意是同一个应用程序。这个协同过程借助于分布式软总线等关键技术是如丝般顺滑的,而且开发上非常简单。

在这里,先给大家演示以下流转的基本开发方法。

2 应用程序流转的实现

这主要包含了三个主要步骤:

(1)权限配置(包括动态权限和静态权限)

(2)在Ability和AbilitySlice中实现IAbilityContinuation接口。

(3)调用ContinueAbility()方法实现流转

具体的实现方法如下:

首先,我们创建一个空的手机Java工程。模板为:Empty Feature Ability (Java)。

让我们修改以下UI界面,仅显示一个【流转】按钮。如图

布局代码如下:<?xml  version="1.0" encoding="utf-8"?>

xmlns:ohos="http://schemas.huawei.com/res/ohos"

ohos:height="match_parent"

ohos:width="match_parent"

ohos:orientation="vertical">

ohos:id="$+id:btn_continue"

ohos:height="match_parent"

ohos:width="match_parent"

ohos:layout_alignment="horizontal_center"

ohos:text="迁移"

ohos:text_size="50"

/>

然后在config.json中配置静态权限。

代码如下:

{

......

"module": {

......

"reqPermissions": [

{

"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"

},

{

"name": "ohos.permission.DISTRIBUTED_DATASYNC"

}

],

.....

}

在MainAbility.java中添加以下代码:public class MainAbility extends Ability implements IAbilityContinuation {

@Override

public void onStart(Intent intent) {

super.onStart(intent);

super.setMainRoute(MainAbilitySlice.class.getName());

requestPermission();

}

private void requestPermission() {

String[] permission = {

"ohos.permission.DISTRIBUTED_DATASYNC",

"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"};

List applyPermissions = new ArrayList<>();

for (String element : permission) {

if (verifySelfPermission(element) != 0) {

if (canRequestPermission(element)) {

applyPermissions.add(element);

} else {

}

} else {

}

}

requestPermissionsFromUser(applyPermissions.toArray(new String[0]), 0);

}

@Override

public boolean onStartContinuation() {

return true;

}

@Override

public boolean onSaveData(IntentParams intentParams) {

return true;

}

@Override

public boolean onRestoreData(IntentParams intentParams) {

return true;

}

@Override

public void onCompleteContinuation(int i) {

}

}

这段代码中包括两个部分:

(1)通过requestPermission()方法动态申请权限。

(2)实现IAbilityContinuation接口,并重写其四个主要的方法。方法内容可以为空,因为承载界面的为AbilitySlice。

在MainAbilitySlice.java中添加以下代码:

文章后续内容和附件可以点击下面的原文链接前往学习

鸿蒙程序如何上传,鸿蒙应用程序流转的实现相关推荐

  1. 小程序一次性上传多个本地图片,上拉加载照片以及图片加载延迟解决之道

    一:小程序之一次性上传多个本地相片 最近由于项目需要所以学了下小程序,也做了一些东西,随后便有了以下的一些总结了,现在说说如何使用小程序一次性上传多个本地相片. 问题描述 最近做项目的时候要实现一个上 ...

  2. MVC应用程序实现上传文件(续)

    前几天,有练习了<MVC应用程序实现上传文件>http://www.cnblogs.com/insus/p/3590907.html 那只是把文档上传至MVC应用程序下的某一目录之中. 其 ...

  3. 上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传

    前言 书接上回的<SpringBoot开发案例之微信小程序文件上传>,正常的业务流程是,口语测评需要学生通过前端微信小程序录入一段音频,通过调用第三方音频处理服务商进行评分,然后服务端对原 ...

  4. inno setup 另一个程序正在使用此文件_STEP 7-MicroWIN SMART程序的上传与下载方式

    S7-200 SMART的编程软件叫做STEP 7-MicroWIN SMART,能够实现对S7-200SMART系列PLC的编程与监视工作. STEP 7-MicroWIN SMART官方的版本已经 ...

  5. 微信小程序上传接口php,微信小程序API 上传、下载

    微信小程序API 上传.下载 wx.uploadFile(OBJECT) 将本地资源上传到开发者服务器.如页面通过 wx.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口 ...

  6. 微信小程序图片上传九宫格拖拽组件

    微信小程序图片上传&九宫格拖拽组件 前言 图片上传加九宫格拖拽是一个比较常用的组件,常用于发帖或者评论等内容上传模块,我这篇九宫格拖拽的思路是借鉴了一款优雅的小程序拖拽排序组件实现这篇文章 实 ...

  7. 微信小程序直接上传文件到阿里云OSS组件封装

    微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...

  8. 微信小程序:上传的图片显示旋转问题

    问题? 开发中遇到微信小程序在上传照片后,会有一定概率旋转,查阅了资料之后,发现是和图片中携带的exif信息中的orientation这个参数有关. 小程序的页面实用webview渲染的,webvie ...

  9. 微信小程序头像上传(一)

    记录一下自己实现微信小程序头像上传的过程. wxml部分( 用了vant组件库 ): <view class="info"><van-imageroundwidt ...

最新文章

  1. c语言删除偶数号节点,第十二周作业
  2. 2012年CS毕业生
  3. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
  4. 如何启动多个WebLogic托管服务器
  5. ASP.NET 实现登录界面(生成验证码)
  6. sql面试题问答题_SQL面试问答
  7. 消灭内存不能为read或written等错误
  8. YDOOK:VSC VisioStudio Code 设置 鼠标滚轮缩放字体大小 滚轮控制字体放大缩小
  9. 如何在Nature杂志上发表文章
  10. csdn下载分获取方法
  11. 三层交换机配置的步骤
  12. AETA地震预测 AI 算法大赛——Helloworld队比赛方案(亚军)
  13. gimp 架构_GIMP添加插件..doc
  14. spring配置事务,是否可以实现行级锁(for update)
  15. 计算机操作系统——LINUX的C语言编程与shell编程
  16. Winds Liunx Docker 安装Redis
  17. 一文带你全面解析postman工具的使用(高级篇)
  18. 小功能解决小麻烦,福昕PDF阅读器仿真放大镜功能详解
  19. InstallShield-Limited-Edition 注册
  20. eggs和egg是什么意思_eggs是什么意思_eggs怎么读_eggs翻译_用法_发音_词组_同反义词_卵( egg的名词复数 )-新东方在线英语词典...

热门文章

  1. R语言使用scatterplot3d包的scatterplot3d函数可视化3D散点图(3D scatter plots)、在3D散点图中添加垂直线和数据点描影、3D图中添加回归平面
  2. pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)、pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行
  3. R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据
  4. Numpy的广播机制详解(broadcasting)
  5. NLP语义标注模型数据准备及实战
  6. R假设检验之Jarque-Bera检验(Jarque-Bera Test)
  7. perconadb mysql_是时候用PerconaDB替换MySQL了
  8. Keras K.switch()用法
  9. 本地虚拟机的linux文件,连接虚拟机上传本地文件 打包Linux的文件 下载的本地
  10. tf.keras.optimizers.Adam 优化器 示例