HarmonyOS技术社区 · 2020年12月17日

#2020征文-手机#【干货】鸿蒙应用程序流转的实现!

目录:

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

2 应用程序流转的实现

3 源码包

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

图片.png

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

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

欢迎大家观看,并提出宝贵的意见:https://edu.51cto.com/course/...

下面进入正题:

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

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

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

应用流转和协同是鸿蒙操作系统分布式的重要体现。这里面涉及两个概念:

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

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

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

图片.png

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

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

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

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

那么什么是协同呢?

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

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

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

2 应用程序流转的实现

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

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

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

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

具体的实现方法如下:

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

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

布局代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_parent"
        ohos:width="match_parent"
        ohos:orientation="vertical">

        <Button
            ohos:id="$+id:btn_continue"
            ohos:height="match_parent"
            ohos:width="match_parent"
            ohos:layout_alignment="horizontal_center"
            ohos:text="迁移"
            ohos:text_size="50"
        />

    </DirectionalLayout>

然后在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<String> 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) {

        }
    }

解锁更多章节


作者:董昱
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://harmonyos.51cto.com#jssq

推荐阅读
关注数
3010
内容数
446
华为鸿蒙相关技术,活动及资讯,欢迎关注及加入创作
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息