暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

鸿蒙OS中实现页面跳转方法汇总!

鸿蒙技术社区 2021-05-12
367

不同 Slice 间跳转,同一个 Ability 中,优点是方便,高效,缺点是业务逻辑复杂度受限。

button.setClickedListener(
    listener -> present(new SecondAbilitySlice(), new Intent())
);


使用 Intent 借助于 ElementName,最常用的页面跳转方式,方便传递参数以及实现相对复杂的业务逻辑交互。

ElementName elementName = new ElementName(……);
intent.setElement(elementName);
intent.setParam(……);
startAbility(intent);


借助于 Operation,可实现跨应用页面跳转。
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName("com.demoapp")
        .withAbilityName("com.demoapp.FooAbility")
        .build();
 intent.setOperation(operation);
startAbility(intent);


Rout 路由(JS),调用 router.push() 接口将 uri 指定的页面添加到路由栈中,即跳转到 uri 指定的页面。在调用 router 方法之前,需要导入 router 模块。


调用 router.push() 路由到详情页:

// index.js
import router from '@system.router';
export default {
  launch() {
    router.push ({
      uri'pages/detail/detail',
    });
  },
}


调用 router.back() 回到首页:
// detail.js
import router from '@system.router';
export default {
  launch() {
    router.back();
  },
}


通过迁移实现分布式设备间页面传递(有请求迁移和请求回迁两种操作)。


1)需实现 IAbilityContinuation 接口

2)需要权限:

ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允许获取分布式组网内的设备列表和设备信息
ohos.permission.DISTRIBUTED_DATASYNC:用于允许不同设备间的数据交换
ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允许监听分布式组网内的设备状态变化
ohos.permission.READ_USER_STORAGE:读取存储卡中的内容
ohos.permission.WRITE_USER_STORAGE:修改或删除存储卡中的内容
ohos.permission.GET_BUNDLE_INFO:用于查询其他应用的信息
ohos.permission.servicebus.ACCESS_SERVICE:分布式数据传输的权限
com.huawei.hwddmp.servicebus.BIND_SERVICE:系统应用使用权限


3)需要获取分布式设备 ID(NetworkID)

核心服务类:IContinuationRegisterManager。


服务类的常用 API 方法:

  • getContinuationRegisterManager();获取服务类的对象

  • register();注册服务

  • showDeviceList();获取设备列表

  • unregister();注销服务


4)请求迁移关键步骤(假定设备 A 向设备 B 迁移)


如下:

  • 需要迁移的 page 实现 IAbilityContinuation 接口

  • 复写 onStartContinuation() 方法,做迁移前的准备工作

  • 复写 onSaveData()方法,保存迁移数据

  • 在设备 B 上复写 onRestoreData() 方法,恢复迁移数据

  • 在设备 A 上复写 onCompleteContinuation() 方法,做迁移后的收尾工作

  • 调用 continueAbility() 或 continueAbilityReversibly() 发起迁移


5)请求回迁需在设备 A 上调用 reverseContinueAbility() 请求回迁


以下关键步骤类似 4)。


👇点击关注鸿蒙技术社区👇

专注开源技术,共建鸿蒙生态


“阅读原文”了解更多

文章转载自鸿蒙技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论