Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
897fca57
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
897fca57
编写于
8月 29, 2023
作者:
O
openharmony_ci
提交者:
Gitee
8月 29, 2023
浏览文件
操作
浏览文件
下载
差异文件
!23380 arkts 指导文档示例在monthly分支代码规范化整改
Merge pull request !23380 from hunili/monthly_20230815
上级
5a6fddf1
4be2ad5c
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
969 addition
and
618 deletion
+969
-618
zh-cn/application-dev/application-models/hop-cross-device-migration.md
...tion-dev/application-models/hop-cross-device-migration.md
+319
-132
zh-cn/application-dev/application-models/hop-multi-device-collaboration.md
...-dev/application-models/hop-multi-device-collaboration.md
+301
-182
zh-cn/application-dev/reference/apis/js-apis-continuation-continuationManager.md
...eference/apis/js-apis-continuation-continuationManager.md
+136
-104
zh-cn/application-dev/reference/apis/js-apis-distributedMissionManager.md
...n-dev/reference/apis/js-apis-distributedMissionManager.md
+182
-167
zh-cn/application-dev/reference/apis/js-apis-inner-application-continuableInfo.md
...ference/apis/js-apis-inner-application-continuableInfo.md
+10
-10
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueCallback.md
...erence/apis/js-apis-inner-application-continueCallback.md
+7
-8
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueDeviceInfo.md
...ence/apis/js-apis-inner-application-continueDeviceInfo.md
+6
-8
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueMissionInfo.md
...nce/apis/js-apis-inner-application-continueMissionInfo.md
+8
-7
未找到文件。
zh-cn/application-dev/application-models/hop-cross-device-migration.md
浏览文件 @
897fca57
# 跨端迁移
# 跨端迁移
## 功能描述
## 功能描述
跨端迁移的主要工作是实现将应用当前任务(包括页面控件状态变量等)迁移到目标设备,能在目标设备上接续。主要功能包括:
跨端迁移的主要工作是实现将应用当前任务(包括页面控件状态变量等)迁移到目标设备,能在目标设备上接续。主要功能包括:
-
支持用户自定义数据存储及恢复。
-
支持用户自定义数据存储及恢复。
-
支持页面路由信息和页面控件状态数据的存储及恢复。
-
支持页面路由信息和页面控件状态数据的存储及恢复。
-
支持应用兼容性检测。
-
支持应用兼容性检测。
-
支持应用根据实际使用场景动态设置迁移状态(默认迁移状态为
**ACTIVE**
激活状态)。如编辑类应用在编辑文本的页面下才需要迁移,其他页面不需要迁移,则可以通过
[
setMissionContinueState
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10
)
进行控制。
-
支持应用根据实际使用场景动态设置迁移状态(默认迁移状态为ACTIVE激活状态)。如编辑类应用在编辑文本的页面下才需要迁移,其他页面不需要迁移,则可以通过
[
setMissionContinueState
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10
)
进行控制。
-
支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。如应用希望自定义迁移到其他设备后显示的页面,则可以通过
[
SUPPORT_CONTINUE_PAGE_STACK_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
进行控制。
-
支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。如应用希望自定义迁移到其他设备后显示的页面,则可以通过
[
SUPPORT_CONTINUE_PAGE_STACK_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
进行控制。
-
支持应用动态选择迁移成功后是否退出迁移发起端应用(默认迁移成功后退出迁移发起端应用)。则可以通过
[
SUPPORT_CONTINUE_SOURCE_EXIT_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
进行控制。
-
支持应用动态选择流转成功后是否退出迁移发起端应用(默认流转成功后退出迁移发起端应用)。则可以通过
[
SUPPORT_CONTINUE_SOURCE_EXIT_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
进行控制。
## 跨端迁移流程
## 跨端迁移流程
...
@@ -28,14 +22,9 @@
...
@@ -28,14 +22,9 @@
## 约束限制
## 约束限制
-
由于“跨端迁移任务管理”能力尚未具备,开发者当前只能开发具备跨端迁移能力的应用,但不能发起迁移。
-
应用迁移的发起依赖系统应用控制,系统应用开发者可以参考
[
验证指导中的demo示例
](
#验证指导
)
实现相关的控制能力。
-
跨端迁移要求在同UIAbility之间进行,也就是需要相同的bundleName、abilityName和签名。
-
跨端迁移要求在同UIAbility之间进行,也就是需要相同的bundleName、abilityName和签名。
-
为了获得最佳体验,使用wantParam传输的数据建议在100KB以下。
## 最佳实践
为了获得最佳体验,使用wantParam传输的数据建议在100KB以下。
## 接口说明
## 接口说明
...
@@ -46,31 +35,35 @@
...
@@ -46,31 +35,35 @@
|
**接口名**
|
**描述**
|
|
**接口名**
|
**描述**
|
| -------- | -------- |
| -------- | -------- |
| onContinue(wantParam
:
{[key:
string]:
Object}):
OnContinueResult | 迁移发起端在该回调中保存迁移所需要的数据,同时返回是否同意迁移:
<br/>
-
AGREE:表示同意。
<br/>
-
REJECT:表示拒绝:如应用在onContinue中异常
可以直接REJECT。
<br/>
-
MISMATCH:表示版本不匹配:迁移发起端应用可以在onContinue中获取到迁移接收
端应用的版本号,进行协商后,如果版本不匹配导致无法迁移,可以返回该错误。 |
| onContinue(wantParam
:
{[key:
string]:
Object}):
OnContinueResult | 迁移发起端在该回调中保存迁移所需要的数据,同时返回是否同意迁移:
<br/>
-
AGREE:表示同意。
<br/>
-
REJECT:表示拒绝:如应用在onContinue中异常
会导致钱以后数据恢复时显示异常,则可以建议REJECT。
<br/>
-
MISMATCH:表示版本不匹配:迁移发起端应用可以在onContinue中获取到迁移目标
端应用的版本号,进行协商后,如果版本不匹配导致无法迁移,可以返回该错误。 |
| onCreate(want:
Want,
launchParam:
AbilityConstant.LaunchParam):
void; | 应用迁移
接收
端为冷启动或多实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。详见
[
应用组件启动模式
](
uiability-launch-type.md
)
|
| onCreate(want:
Want,
launchParam:
AbilityConstant.LaunchParam):
void; | 应用迁移
目标
端为冷启动或多实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。详见
[
应用组件启动模式
](
uiability-launch-type.md
)
|
| onNewWant(want:
Want,
launchParam:
AbilityConstant.LaunchParam):
void; | 迁移
接收
端为单实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。详见
[
应用组件启动模式
](
uiability-launch-type.md
)
|
| onNewWant(want:
Want,
launchParam:
AbilityConstant.LaunchParam):
void; | 迁移
目标
端为单实例应用热启动时,在该回调中完成数据恢复,并触发页面恢复。详见
[
应用组件启动模式
](
uiability-launch-type.md
)
|
## 开发步骤
## 开发步骤
1.
需要申请
`ohos.permission.DISTRIBUTED_DATASYNC`
权限,配置方式请参见
[
配置文件权限声明
](
../security/accesstoken-guidelines.md#配置文件权限声明
)
。
1.
需要申请
`ohos.permission.DISTRIBUTED_DATASYNC`
权限
配置方式请参见
[
配置文件权限声明
](
../security/accesstoken-guidelines.md#配置文件权限声明
)
。
2.
同时需要在应用首次启动时弹窗向用户申请授权,使用方式请参见
[
向用户申请授权
](
../security/accesstoken-guidelines.md#向用户申请授权
)
。
2.
同时需要在应用首次启动时弹窗向用户申请授权
3.
在配置文件中配置跨端迁移相关标签字段
。
使用方式请参见
[
向用户申请授权
](
../security/accesstoken-guidelines.md#向用户申请授权
)
。
配置应用支持迁移
3.
在配置文件中配置跨端迁移相关标签字段。
在module.json5中配置continuable标签:true表示支持迁移,false表示不支持,默认为false。配置为false的UIAbility将被系统识别为无法迁移。
配置应用支持迁移
在module.json5中配置continuable标签:true表示支持迁移,false表示不支持,默认为false。配置为false的UIAbility将被系统识别为无法迁移。
```
json
```
json
{
{
"module"
:
{
"module"
:
{
...
//
...
"abilities"
:
[
"abilities"
:
[
{
{
...
//
...
"continuable"
:
true
,
"continuable"
:
true
,
}
}
]
]
...
@@ -80,13 +73,15 @@
...
@@ -80,13 +73,15 @@
根据需要配置应用启动模式类型,配置详情请参照
[
UIAbility组件启动模式
](
uiability-launch-type.md
)
。
根据需要配置应用启动模式类型,配置详情请参照
[
UIAbility组件启动模式
](
uiability-launch-type.md
)
。
4.
在发起端UIAbility中实现
[
onContinue()
](
../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue
)
接口。
4.
在发起端UIAbility中实现
[
onContinue
](
../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue
)
接口。
当应用触发迁移时,
[
onContinue()
](
../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue
)
接口在发起端被调用,开发者可以在该接口中保存迁移数据,实现应用兼容性检测,决定是否支持此次迁移。
-
保存迁移数据:开发者可以将要迁移的数据通过键值对的方式保存在wantParam中。
当应用触发迁移时,
[
onContinue
](
../reference/apis/js-apis-app-ability-uiAbility.md#abilityoncontinue
)
接口在发起端被调用,开发者可以在该接口中保存迁移数据,实现应用兼容性检测,决定是否支持此次迁移。
-
保存迁移数据:开发者可以将要迁移的数据通过键值对的方式保存在wantParam中。
-
应用兼容性检测:开发者可以通过从wantParam中获取目标应用的版本号与本应用版本号做兼容性校验。开发者可以在触发迁移时从
`onContinue`
接口中
`wantParam.version`
获取到迁移接收
端应用的版本号与迁移发起端应用版本号做兼容校验。
-
应用兼容性检测:开发者可以通过从wantParam中获取目标应用的版本号与本应用版本号做兼容性校验。开发者可以在触发迁移时从
`onContinue`
接口中
`wantParam.version`
获取到迁移目标
端应用的版本号与迁移发起端应用版本号做兼容校验。
-
迁移决策:开发者可以通过onContinue接口的返回值决定是否支持此次迁移,返回值信息见
[
接口说明
](
#接口说明
)
。
-
迁移决策:开发者可以通过onContinue接口的返回值决定是否支持此次迁移,返回值信息见
[
接口说明
](
#接口说明
)
。
示例如下:
示例如下:
...
@@ -94,18 +89,29 @@
...
@@ -94,18 +89,29 @@
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
onContinue
(
wantParam
:
{[
key
:
string
]:
any
})
{
export
default
class
EntryAbility
extends
UIAbility
{
console
.
info
(
`onContinue version =
${
wantParam
.
version
}
, targetDevice:
${
wantParam
.
targetDevice
}
`
)
onContinue
(
wantParam
:
Record
<
string
,
Object
>
)
{
let
workInput
=
AppStorage
.
Get
<
string
>
(
'
ContinueWork
'
);
console
.
info
(
`onContinue version =
${
wantParam
.
version
}
, targetDevice:
${
wantParam
.
targetDevice
}
`
)
// 准备迁移数据
// set user input data into want params
let
continueInput
=
'
迁移的数据
'
;
wantParam
[
"
work
"
]
=
workInput
// set user input data into want params
if
(
continueInput
)
{
console
.
info
(
`onContinue input =
${
wantParam
[
"
input
"
]}
`
);
// 将要迁移的数据保存在wantParam的自定义字段(如:data)中;
return
AbilityConstant
.
OnContinueResult
.
AGREE
wantParam
[
"
data
"
]
=
continueInput
;
}
console
.
info
(
`onContinue input =
${
wantParam
[
"
data
"
]}
`
);
return
AbilityConstant
.
OnContinueResult
.
AGREE
;
}
}
}
```
```
5.
在目标端设备UIAbility中实现onCreate()与onNewWant()接口,恢复迁移数据。
5.
在Stage模型中,应用在不同启动模式下将调用不同的接口,以恢复数据、加载界面。
-
onCreate实现示例
不同情况下的函数调用如下图所示:

在目标端设备UIAbility中实现onCreate与onNewWant接口,恢复迁移数据。
-
onCreate实现示例
-
目标端设备上,在onCreate中根据launchReason判断该次启动是否为迁移LaunchReason.CONTINUATION。
-
目标端设备上,在onCreate中根据launchReason判断该次启动是否为迁移LaunchReason.CONTINUATION。
-
开发者可以从want中获取保存的迁移数据。
-
开发者可以从want中获取保存的迁移数据。
-
完成数据恢复后,开发者需要调用restoreWindowStage来触发页面恢复:包括页面栈信息。
-
完成数据恢复后,开发者需要调用restoreWindowStage来触发页面恢复:包括页面栈信息。
...
@@ -113,98 +119,279 @@
...
@@ -113,98 +119,279 @@
```
ts
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import distributedObject from '@ohos.data.distributedDataObjec
t';
import
Want
from
'
@ohos.app.ability.Wan
t
'
;
export
default
class
EntryAbility
extends
UIAbility
{
export
default
class
EntryAbility
extends
UIAbility
{
storage : LocalStorage
;
storage
:
LocalStorage
=
new
LocalStorage
()
;
onCreate(want, launchParam)
{
onCreate
(
want
:
Want
,
launchParam
:
AbilityConstant
.
LaunchParam
):
void
{
console
.
info
(
`EntryAbility onCreate
${
AbilityConstant
.
LaunchReason
.
CONTINUATION
}
`
)
console
.
info
(
`EntryAbility onCreate
${
AbilityConstant
.
LaunchReason
.
CONTINUATION
}
`
)
if
(
launchParam
.
launchReason
==
AbilityConstant
.
LaunchReason
.
CONTINUATION
)
{
if
(
launchParam
.
launchReason
==
AbilityConstant
.
LaunchReason
.
CONTINUATION
)
{
// get user data from want params
// 将上述的保存的数据取出恢复
let workInput = want.parameters.work
let
continueInput
=
''
;
console.info(`work input ${workInput}`)
if
(
want
.
parameters
!=
undefined
)
{
AppStorage.SetOrCreate<string>('ContinueWork', workInput)
continueInput
=
JSON
.
stringify
(
want
.
parameters
.
data
);
this.storage = new LocalStorage();
console
.
info
(
`continue input
${
continueInput
}
`
)
}
// 将数据显示当前页面
this
.
context
.
restoreWindowStage
(
this
.
storage
);
this
.
context
.
restoreWindowStage
(
this
.
storage
);
}
}
}
}
}
}
```
```
-
如果是单实例应用,需要额外实现onNewWant()接口,实现方式与onCreate()
的实现相同。
-
如果是单实例应用,需要额外实现onNewWant接口,实现方式与onCreate
的实现相同。
-
在onNewWant()
中判断迁移场景,恢复数据,并触发页面恢复
-
在onNewWant
中判断迁移场景,恢复数据,并触发页面恢复
```ts
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
export default class EntryAbility extends UIAbility {
export default class EntryAbility extends UIAbility {
storage : LocalStorage
;
storage : LocalStorage = new LocalStorage()
;
onNewWant(want, launchParam)
{
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void
{
console.info(`EntryAbility onNewWant ${AbilityConstant.LaunchReason.CONTINUATION}`)
console.info(`EntryAbility onNewWant ${AbilityConstant.LaunchReason.CONTINUATION}`)
if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) {
if (launchParam.launchReason == AbilityConstant.LaunchReason.CONTINUATION) {
// get user data from want params
// get user data from want params
let workInput = want.parameters.work
let continueInput = '';
console.info(`work input ${workInput}`)
if (want.parameters != undefined) {
AppStorage.SetOrCreate<string>('ContinueWork', workInput)
continueInput = JSON.stringify(want.parameters.data);
this.storage = new LocalStorage();
console.info(`continue input ${continueInput}`);
}
this.context.restoreWindowStage(this.storage);
this.context.restoreWindowStage(this.storage);
}
}
}
}
}
}
```
6.
**可选配置:**
在应用支持迁移特性时,默认开启应用迁移状态开关,根据应用当前任务获取焦点/失去焦点通知周边的可信设备当前任务可流转/取消流转。若应用需要在特定场景下才通知周边设备可流转,则需要在应用打开时设置迁移状态为INACTIVE,在后续的业务流程中需要迁移时再设置迁移状态为ACTIVE。接口见
[
setMissionContinueState
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10
)
。
- 示例:应用启动不需要流转
```ts
## 迁移功能可选配置
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
### 1.动态配置迁移能力
从API 10 起,提供了支持动态配置迁移能力的功能。即应用可以根据实际使用场景,在需要迁移功能时,设置开启应用迁移能力;在业务不需要迁移时,则可以关闭迁移能力。开发者可以通过调用
[
setMissionContinueState
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextsetmissioncontinuestate10
)
接口对迁移能力进行设置。默认状态下,可迁移应用的迁移能力为
**ACTIVE**
状态,即迁移能力开启,可以迁移。
onCreate(want, launchParam) {
| 接口状态值 | 含义 |
| :------------------------------------- | ---------------------- |
| AbilityConstant.ContinueState.ACTIVE | 应用当前可迁移能力开启 |
| AbilityConstant.ContinueState.INACTIVE | 应用当前可迁移能力关闭 |
**设置迁移能力的时机**
迁移能力的改变可以根据实际业务需求和代码实现,发生在应用生命周期的绝大多数时机。本文介绍常用的几种配置方式。
在ability的onCreate函数中调用接口,可以在应用创建时设置应用的迁移状态。
```
ts
// EntryAbility.ets
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
export
default
class
EntryAbility
extends
UIAbility
{
onCreate
(
want
:
Want
,
launchParam
:
AbilityConstant
.
LaunchParam
):
void
{
// ...
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
INACTIVE
,
(
result
)
=>
{
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
INACTIVE
,
(
result
)
=>
{
console
.
info
(
`setMissionContinueState:
${
JSON
.
stringify
(
result
)}
`
);
console
.
info
(
`setMissionContinueState:
${
JSON
.
stringify
(
result
)}
`
);
});
});
// ...
}
}
```
}
- 示例:应用在后续的业务流程中需要流转了
```
```ts
在页面的onPageShow函数中调用接口,可以设置单个页面出现时应用的迁移状态。
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
```
ts
// PageName.ets
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
common
from
'
@ohos.app.ability.common
'
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
}
// ...
onPageShow
(){
// 进入该页面时,将应用设置为可迁移状态
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
ACTIVE
,
(
result
)
=>
{
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
ACTIVE
,
(
result
)
=>
{
console
.
info
(
'
setMissionContinueState ACTIVE result:
'
,
JSON
.
stringify
(
result
));
});
}
}
```
在某个组件的触发事件中设置应用迁移能力。如下例中,使用
**Button**
组件的
**onClick**
事件,触发迁移能力的改变。
```
ts
// PageName.ets
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
common
from
'
@ohos.app.ability.common
'
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
()
{
//...
}.
onClick
(()
=>
{
//点击该按钮时,将应用设置为可迁移状态
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
ACTIVE
,
(
result
)
=>
{
console
.
info
(
'
setMissionContinueState ACTIVE result:
'
,
JSON
.
stringify
(
result
));
});
})
}
}
```
**保证迁移连续性**
由于迁移加载时,目标端拉起的应用可能执行过自己的迁移状态设置命令(如:冷启动时目标端在onCreate中设置了
**INACTIVE**
;热启动时对端已打开了不可迁移的页面,迁移状态为
**INACTIVE**
等情况)。为了保证迁移过后的应用依然具有可以迁移回发起端的能力,应在 onCreate和onNewWant的迁移调用判断中,将迁移状态设置为
**ACTIVE**
。
```
ts
// EntryAbility.ets
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
export
default
class
EntryAbility
extends
UIAbility
{
// ...
onCreate
(
want
:
Want
,
launchParam
:
AbilityConstant
.
LaunchParam
):
void
{
// ...
// 调用原因为迁移时,设置状态为可迁移,应对冷启动情况
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
INACTIVE
,
(
result
)
=>
{
console
.
info
(
`setMissionContinueState:
${
JSON
.
stringify
(
result
)}
`
);
console
.
info
(
`setMissionContinueState:
${
JSON
.
stringify
(
result
)}
`
);
});
});
```
}
onNewWant
(
want
:
Want
,
launchParam
:
AbilityConstant
.
LaunchParam
):
void
{
// ...
// 调用原因为迁移时,设置状态为可迁移,应对热启动情况
if
(
launchParam
.
launchReason
==
AbilityConstant
.
LaunchReason
.
CONTINUATION
)
{
this
.
context
.
setMissionContinueState
(
AbilityConstant
.
ContinueState
.
ACTIVE
,
(
result
)
=>
{
console
.
info
(
'
setMissionContinueState ACTIVE result:
'
,
JSON
.
stringify
(
result
));
});
}
}
// ...
}
```
7.
**可选配置:**
支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。如果应用不想使用系统默认恢复的页面栈,则可以设置不进行页面栈迁移,而需要在
`onWindowStageRestore`
设置流转后进入的页面,参数定义见
[
SUPPORT_CONTINUE_PAGE_STACK_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
。
### 2.按需迁移页面栈
- 示例:应用迁移不需要自动流转页面栈信息
支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。如果应用不想使用系统默认恢复的页面栈,则可以设置不进行页面栈迁移,而需要在
`onWindowStageRestore`
设置迁移后进入的页面,参数定义见
[
SUPPORT_CONTINUE_PAGE_STACK_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
。
应用在发起端的页面栈中存在Index和Second路由,而在目标端恢复时不需要按照发起端页面栈进行恢复,需要恢复到指定页面。
-
示例:应用迁移不需要自动迁移页面栈信息
```ts
```ts
// EntryAbility.ets
import UIAbility from '@ohos.app.ability.UIAbility';
import UIAbility from '@ohos.app.ability.UIAbility';
import wantConstant from '@ohos.app.ability.wantConstant.d.ts';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import wantConstant from '@ohos.app.ability.wantConstant';
onContinue(wantParam : {[key: string]: any}) {
import window from '@ohos.window';
console.info(`onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`)
export default class EntryAbility extends UIAbility {
// ...
onContinue(wantParam: Record<string, Object>) {
console.info(`onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`);
wantParam[wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY] = false;
wantParam[wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY] = false;
return AbilityConstant.OnContinueResult.AGREE;
return AbilityConstant.OnContinueResult.AGREE;
}
}
// ...
onWindowStageRestore(windowStage) {
onWindowStageRestore(windowStage: window.WindowStage) {
// 若不需要自动流转页面栈信息,则需要在此处设置应用流转后进入的页面
// 若不需要自动迁移页面栈信息,则需要在此处设置应用迁移后进入的页面
windowStage.setUIContent(this.contex, "pages/index", null);
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
console.info('Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
console.info('Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
});
}
}
}
```
```
8.
**可选配置:**
支持应用动态选择迁移成功后是否退出迁移发起端应用(默认流转成功后退出迁移发起端应用)。如果应用不想让系统自动退出迁移发起端应用,则可以设置不退出,参数定义见参数定义见
[
SUPPORT_CONTINUE_SOURCE_EXIT_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
。
### 3.按需退出
支持应用动态选择迁移成功后是否退出迁移发起端应用(默认迁移成功后退出迁移发起端应用)。如果应用不想让系统自动退出迁移发起端应用,则可以设置不退出,参数定义见
[
SUPPORT_CONTINUE_SOURCE_EXIT_KEY
](
../reference/apis/js-apis-app-ability-wantConstant.md#wantconstantparams
)
。
- 示例:应用迁移设置不需要迁移成功后退出迁移发起端应用
-
示例:应用迁移设置不需要迁移成功后退出迁移发起端应用
```ts
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
import UIAbility from '@ohos.app.ability.UIAbility';
import wantConstant from '@ohos.app.ability.wantConstant.d.ts';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import wantConstant from '@ohos.app.ability.wantConstant';
onContinue(wantParam : {[key: string]: any}) {
export default class EntryAbility extends UIAbility {
console.info(`onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`)
// ...
onContinue(wantParam: Record<string, Object>) {
console.info(`onContinue version = ${wantParam.version}, targetDevice: ${wantParam.targetDevice}`);
wantParam[wantConstant.Params.SUPPORT_CONTINUE_SOURCE_EXIT_KEY] = false;
wantParam[wantConstant.Params.SUPPORT_CONTINUE_SOURCE_EXIT_KEY] = false;
return AbilityConstant.OnContinueResult.AGREE;
return AbilityConstant.OnContinueResult.AGREE;
}
}
// ...
}
```
```
## 验证指导
为方便开发者验证已开发的可迁移应用,当前OpenHarmony提供了一个全局任务中心demo作为迁移的入口。下面介绍通过安装全局任务中心来验证迁移的方式。
### 1. 编译安装全局任务中心
#### **配置环境**
public-SDK不支持开发者使用所有的系统API,例如:全局任务中心使用的
[
**@ohos.distributedDeviceManager**
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-distributedDeviceManager.md
)
不包括在public_SDK中。因此为了正确编译安装全局任务中心,开发者需要替换full-SDK,具体操作可参见
[
替换指南
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/faqs/full-sdk-switch-guide.md
)
。
**说明**
:本文中的截图仅为参考,具体的显示界面请以实际使用的DevEco Studio和SDK的版本为准。
#### **下载MissionCenter_Demo[示例代码](https://gitee.com/openharmony/ability_dmsfwk/tree/master/services/dtbschedmgr/test/missionCenterDemo/dmsDemo/entry/src/main)**
#### **编译工程文件**
**新建OpenHarmony 空的工程,找到对应的文件夹替换下载文件**

**自动签名,编译安装。**
DevEco的自动签名模板默认签名权限为normal级。而本应用设计到ohos.permission.MANAGE_MISSIONS权限为system_core级别。自动生成的签名无法获得足够的权限,所以需要将权限升级为system_core级别,然后签名。
**系统权限设置**
(以api10目录为例): 将Sdk目录下的openharmony
\a
pi版本(如:10)
\t
oolchains
\l
ib
\U
nsgnedReleasedProfileTemplate.json文件中的"apl":"normal_core"改为"apl":"system_core"。
①点击file->Project Structrue

②点击Signing Configs 点击OK

③连接开发板运行生成demo。
### 2.设备组网
①打开A,B两设备的计算器
②点击右上角箭头选择B设备
③在B设备选择信任设备,弹出PIN码
④在A设备输入PIN码
⑤已组网成功,验证方法:在A设备输入数字,B设备同步出现则证明组网成功
### 3.发起迁移
1.
在B设备打开多设备协同权限的应用,A设备打开全局任务中心demo,A设备出现A设备名称(即:本机:OpenHarmony 3.2)和B设备名称(OpenHarmony 3.2)。

2.
点击B设备名称,然后出现B设备的应用。

3.
最后将应用拖拽到A设备名称处,A设备应用被拉起,B设备应用退出。

zh-cn/application-dev/application-models/hop-multi-device-collaboration.md
浏览文件 @
897fca57
# 多端协同
(仅对系统应用开放)
# 多端协同
## 功能描述
## 功能描述
...
@@ -56,29 +56,32 @@
...
@@ -56,29 +56,32 @@
3.
获取目标设备的设备ID。
3.
获取目标设备的设备ID。
```
ts
```
ts
import
deviceManager
from
'
@ohos.distributed
Hardware.d
eviceManager
'
;
import
deviceManager
from
'
@ohos.distributed
D
eviceManager
'
;
let
dmClass
;
let
dmClass
:
deviceManager
.
DeviceManager
;
function
initDmClass
()
{
function
initDmClass
()
{
// 其中createDeviceManager接口为系统API
// 其中createDeviceManager接口为系统API
deviceManager
.
createDeviceManager
(
'
ohos.samples.demo
'
,
(
err
,
dm
)
=>
{
try
{
if
(
err
)
{
dmClass
=
deviceManager
.
createDeviceManager
(
'
ohos.samples.demo
'
);
...
}
catch
(
err
)
{
return
console
.
error
(
"
createDeviceManager err:
"
+
JSON
.
stringify
(
err
));
}
}
dmClass
=
dm
})
}
}
function
getRemoteDeviceId
()
{
function
getRemoteDeviceId
()
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!==
null
)
{
if
(
typeof
dmClass
===
'
object
'
&&
dmClass
!==
null
)
{
let
list
=
dmClass
.
get
TrustedDeviceListSync
()
let
list
=
dmClass
.
get
AvailableDeviceListSync
();
if
(
typeof
(
list
)
===
'
undefined
'
||
typeof
(
list
.
length
)
===
'
undefined
'
)
{
if
(
typeof
(
list
)
===
'
undefined
'
||
typeof
(
list
.
length
)
===
'
undefined
'
)
{
console
.
info
(
'
EntryAbility onButtonClick getRemoteDeviceId err: list is null
'
)
console
.
info
(
'
getRemoteDeviceId err: list is null
'
);
return
;
}
if
(
list
.
length
===
0
)
{
console
.
info
(
"
getRemoteDeviceId err: list is empty
"
);
return
;
return
;
}
}
return
list
[
0
].
deviceId
return
list
[
0
].
networkId
;
}
else
{
}
else
{
console
.
info
(
'
EntryAbility onButtonClick getRemoteDeviceId err: dmClass is null
'
)
console
.
info
(
'
getRemoteDeviceId err: dmClass is null
'
);
return
;
}
}
}
}
```
```
...
@@ -86,24 +89,29 @@
...
@@ -86,24 +89,29 @@
4.
设置目标组件参数,调用
[
`startAbility()`
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
接口,启动UIAbility或ServiceExtensionAbility。
4.
设置目标组件参数,调用
[
`startAbility()`
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
接口,启动UIAbility或ServiceExtensionAbility。
```
ts
```
ts
let
want
=
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
let
want
:
Want
=
{
deviceId
:
getRemoteDeviceId
(),
deviceId
:
getRemoteDeviceId
(),
bundleName
:
'
com.example.myapplication
'
,
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
Func
Ability
'
,
abilityName
:
'
Entry
Ability
'
,
moduleName
:
'
module1
'
,
// moduleName非必选
moduleName
:
'
entry
'
,
// moduleName非必选
}
}
// context为发起端UIAbility的AbilityContext
// context为发起端UIAbility的AbilityContext
this
.
context
.
startAbility
(
want
).
then
(()
=>
{
this
.
context
.
startAbility
(
want
).
then
(()
=>
{
...
// ...
}).
catch
((
err
)
=>
{
}).
catch
((
err
:
BusinessError
)
=>
{
...
// ...
console
.
error
(
"
startAbility err:
"
+
JSON
.
stringify
(
err
));
})
})
```
```
5.
当设备A发起端应用不需要设备B上的ServiceExtensionAbility时,可调用
stopServiceExtensionAbility
(../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstopserviceextensionability)接口退出。(该接口不支持UIAbility的退出,UIAbility由用户手动通过任务管理退出)
5.
当设备A发起端应用不需要设备B上的ServiceExtensionAbility时,可调用
[
stopServiceExtensionAbility
]
(
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstopserviceextensionability
)
接口退出。(该接口不支持UIAbility的退出,UIAbility由用户手动通过任务管理退出)
```
ts
```
ts
let
want
=
{
import
Want
from
'
@ohos.app.ability.Want
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
want
:
Want
=
{
deviceId
:
getRemoteDeviceId
(),
deviceId
:
getRemoteDeviceId
(),
bundleName
:
'
com.example.myapplication
'
,
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
FuncAbility
'
,
abilityName
:
'
FuncAbility
'
,
...
@@ -112,7 +120,7 @@
...
@@ -112,7 +120,7 @@
// 退出由startAbility接口启动的ServiceExtensionAbility
// 退出由startAbility接口启动的ServiceExtensionAbility
this
.
context
.
stopServiceExtensionAbility
(
want
).
then
(()
=>
{
this
.
context
.
stopServiceExtensionAbility
(
want
).
then
(()
=>
{
console
.
info
(
"
stop service extension ability success
"
)
console
.
info
(
"
stop service extension ability success
"
)
}).
catch
((
err
)
=>
{
}).
catch
((
err
:
BusinessError
)
=>
{
console
.
info
(
"
stop service extension ability err is
"
+
JSON
.
stringify
(
err
))
console
.
info
(
"
stop service extension ability err is
"
+
JSON
.
stringify
(
err
))
})
})
```
```
...
@@ -142,7 +150,19 @@
...
@@ -142,7 +150,19 @@
3.
在发起端设置目标组件参数,调用startAbilityForResult()接口启动目标端UIAbility,异步回调中的data用于接收目标端UIAbility停止自身后返回给调用方UIAbility的信息。getRemoteDeviceId方法参照
[
通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据
](
#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据
)
。
3.
在发起端设置目标组件参数,调用startAbilityForResult()接口启动目标端UIAbility,异步回调中的data用于接收目标端UIAbility停止自身后返回给调用方UIAbility的信息。getRemoteDeviceId方法参照
[
通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据
](
#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据
)
。
```
ts
```
ts
let
want
=
{
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
common
from
'
@ohos.app.ability.common
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
(
'
StartAbilityForResult
'
)
.
onClick
(()
=>
{
let
want
:
Want
=
{
deviceId
:
getRemoteDeviceId
(),
deviceId
:
getRemoteDeviceId
(),
bundleName
:
'
com.example.myapplication
'
,
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
FuncAbility
'
,
abilityName
:
'
FuncAbility
'
,
...
@@ -150,47 +170,87 @@
...
@@ -150,47 +170,87 @@
}
}
// context为发起端UIAbility的AbilityContext
// context为发起端UIAbility的AbilityContext
this
.
context
.
startAbilityForResult
(
want
).
then
((
data
)
=>
{
this
.
context
.
startAbilityForResult
(
want
).
then
((
data
)
=>
{
...
//
...
}).
catch
((
er
r
)
=>
{
}).
catch
((
error
:
BusinessErro
r
)
=>
{
...
console
.
info
(
"
startAbilityForResult err:
"
+
JSON
.
stringify
(
error
));
})
})
}
)
}
}
```
```
4.
在目标端UIAbility任务完成后,调用terminateSelfWithResult()方法,将数据返回给发起端的UIAbility。
4.
在目标端UIAbility任务完成后,调用terminateSelfWithResult()方法,将数据返回给发起端的UIAbility。
```
ts
```
ts
import
{
BusinessError
}
from
'
@ohos.base
'
;
import
common
from
'
@ohos.app.ability.common
'
;
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
(
'
terminateSelfWithResult
'
)
.
onClick
(()
=>
{
const
RESULT_CODE
:
number
=
1001
;
const
RESULT_CODE
:
number
=
1001
;
let
abilityResult
=
{
// context为目标端UIAbility的AbilityContext
this
.
context
.
terminateSelfWithResult
(
{
resultCode
:
RESULT_CODE
,
resultCode
:
RESULT_CODE
,
want
:
{
want
:
{
bundleName
:
'
com.example.myapplication
'
,
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
FuncAbility
'
,
abilityName
:
'
FuncAbility
'
,
moduleName
:
'
module1
'
,
moduleName
:
'
module1
'
,
},
},
}
},
// context为目标端UIAbility的AbilityContext
(
err
:
BusinessError
)
=>
{
this
.
context
.
terminateSelfWithResult
(
abilityResult
,
(
err
)
=>
{
// ...
...
console
.
info
(
"
terminateSelfWithResult err:
"
+
JSON
.
stringify
(
err
));
});
});
}
// ...
)
}
}
```
```
5.
发起端UIAbility接收到目标端UIAbility返回的信息,对其进行处理。
5.
发起端UIAbility接收到目标端UIAbility返回的信息,对其进行处理。
```
ts
```
ts
import
common
from
'
@ohos.app.ability.common
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
(
'
StartAbilityForResult
'
)
.
onClick
(()
=>
{
let
want
:
Want
=
{
deviceId
:
getRemoteDeviceId
(),
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
FuncAbility
'
,
moduleName
:
'
module1
'
,
// moduleName非必选
}
const
RESULT_CODE
:
number
=
1001
;
const
RESULT_CODE
:
number
=
1001
;
// ...
...
// context为调用方UIAbility的UIAbilityContext
// context为调用方UIAbility的UIAbilityContext
this
.
context
.
startAbilityForResult
(
want
).
then
((
data
)
=>
{
this
.
context
.
startAbilityForResult
(
want
).
then
((
data
)
=>
{
if
(
data
?.
resultCode
===
RESULT_CODE
)
{
if
(
data
?.
resultCode
===
RESULT_CODE
)
{
// 解析目标端UIAbility返回的信息
// 解析目标端UIAbility返回的信息
let
info
=
data
.
want
?.
parameters
?.
info
let
info
=
data
.
want
?.
parameters
?.
info
;
...
//
...
}
}
}).
catch
((
er
r
)
=>
{
}).
catch
((
error
:
BusinessErro
r
)
=>
{
...
//
...
})
})
}
)
}
}
```
```
...
@@ -216,7 +276,7 @@
...
@@ -216,7 +276,7 @@
2.
同时需要在应用首次启动时弹窗向用户申请授权,使用方式请参见
[
向用户申请授权
](
../security/accesstoken-guidelines.md#向用户申请授权
)
。
2.
同时需要在应用首次启动时弹窗向用户申请授权,使用方式请参见
[
向用户申请授权
](
../security/accesstoken-guidelines.md#向用户申请授权
)
。
3.
如果已有后台服务,请直接进入下一步;如果没有,则
[
实现一个后台服务
](
serviceextensionability.md#实现一个后台服务
仅对系统应用开放
)
。
3.
如果已有后台服务,请直接进入下一步;如果没有,则
[
实现一个后台服务
](
serviceextensionability.md#实现一个后台服务
(仅对系统应用开放)
)
。
4.
连接一个后台服务。
4.
连接一个后台服务。
-
实现IAbilityConnection接口。IAbilityConnection提供了以下方法供开发者实现:onConnect()是用来处理连接Service成功的回调,onDisconnect()是用来处理Service异常终止的回调,onFailed()是用来处理连接Service失败的回调。
-
实现IAbilityConnection接口。IAbilityConnection提供了以下方法供开发者实现:onConnect()是用来处理连接Service成功的回调,onDisconnect()是用来处理Service异常终止的回调,onFailed()是用来处理连接Service失败的回调。
...
@@ -227,14 +287,26 @@
...
@@ -227,14 +287,26 @@
```
ts
```
ts
import
rpc
from
'
@ohos.rpc
'
;
import
rpc
from
'
@ohos.rpc
'
;
import
Want
from
'
@ohos.app.ability.Want
'
;
import
common
from
'
@ohos.app.ability.common
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
(
'
connectServiceExtensionAbility
'
)
.
onClick
(()
=>
{
const
REQUEST_CODE
=
99
;
const
REQUEST_CODE
=
99
;
let
w
ant
=
{
let
want
:
W
ant
=
{
"
deviceId
"
:
getRemoteDeviceId
(),
"
deviceId
"
:
getRemoteDeviceId
(),
"
bundleName
"
:
"
com.example.myapplication
"
,
"
bundleName
"
:
"
com.example.myapplication
"
,
"
abilityName
"
:
"
ServiceExtAbility
"
"
abilityName
"
:
"
ServiceExtAbility
"
};
};
let
options
=
{
// 建立连接后返回的Id需要保存下来,在解绑服务时需要作为参数传入
let
connectionId
=
this
.
context
.
connectServiceExtensionAbility
(
want
,
{
onConnect
(
elementName
,
remote
)
{
onConnect
(
elementName
,
remote
)
{
console
.
info
(
'
onConnect callback
'
);
console
.
info
(
'
onConnect callback
'
);
if
(
remote
===
null
)
{
if
(
remote
===
null
)
{
...
@@ -246,17 +318,16 @@
...
@@ -246,17 +318,16 @@
let
reply
=
new
rpc
.
MessageParcel
();
let
reply
=
new
rpc
.
MessageParcel
();
data
.
writeInt
(
1
);
data
.
writeInt
(
1
);
data
.
writeInt
(
99
);
// 开发者可发送data到目标端应用进行相应操作
data
.
writeInt
(
99
);
// 开发者可发送data到目标端应用进行相应操作
// @param code 表示客户端发送的服务请求代码。
// @param code 表示客户端发送的服务请求代码。
// @param data 表示客户端发送的{@link MessageParcel}对象。
// @param data 表示客户端发送的{@link MessageParcel}对象。
// @param reply 表示远程服务发送的响应消息对象。
// @param reply 表示远程服务发送的响应消息对象。
// @param options 指示操作是同步的还是异步的。
// @param options 指示操作是同步的还是异步的。
//
//
// @return 如果操作成功返回{@code true}; 否则返回 {@code false}。
// @return 如果操作成功返回{@code true}; 否则返回 {@code false}。
remote
.
sendRequest
(
REQUEST_CODE
,
data
,
reply
,
option
).
then
((
re
t
)
=>
{
remote
.
sendRequest
(
REQUEST_CODE
,
data
,
reply
,
option
).
then
((
ret
:
rpc
.
SendRequestResul
t
)
=>
{
let
msg
=
reply
.
readInt
();
// 在成功连接的情况下,会收到来自目标端返回的信息(100)
let
msg
=
reply
.
readInt
();
// 在成功连接的情况下,会收到来自目标端返回的信息(100)
console
.
info
(
`sendRequest ret:
${
ret
}
msg:
${
msg
}
`
);
console
.
info
(
`sendRequest ret:
${
ret
}
msg:
${
msg
}
`
);
}).
catch
((
e
rror
)
=>
{
}).
catch
((
error
:
BusinessE
rror
)
=>
{
console
.
info
(
'
sendRequest failed
'
);
console
.
info
(
'
sendRequest failed
'
);
});
});
},
},
...
@@ -266,9 +337,10 @@
...
@@ -266,9 +337,10 @@
onFailed
(
code
)
{
onFailed
(
code
)
{
console
.
info
(
'
onFailed callback
'
);
console
.
info
(
'
onFailed callback
'
);
}
}
});
})
}
}
}
// 建立连接后返回的Id需要保存下来,在解绑服务时需要作为参数传入
let
connectionId
=
this
.
context
.
connectServiceExtensionAbility
(
want
,
options
);
```
```
getRemoteDeviceId方法参照[通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据](#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据)。
getRemoteDeviceId方法参照[通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据](#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据)。
...
@@ -276,12 +348,25 @@
...
@@ -276,12 +348,25 @@
5.
断开连接。调用disconnectServiceExtensionAbility()断开与后台服务的连接。
5.
断开连接。调用disconnectServiceExtensionAbility()断开与后台服务的连接。
```
ts
```
ts
let
connectionId
=
1
// 在通过connectServiceExtensionAbility绑定服务时返回的Id
import
common
from
'
@ohos.app.ability.common
'
;
this
.
context
.
disconnectServiceExtensionAbility
(
connectionId
).
then
((
data
)
=>
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
@
Entry
@
Component
struct
PageName
{
private
context
=
getContext
(
this
)
as
common
.
UIAbilityContext
;
build
()
{
// ...
Button
(
'
disconnectServiceExtensionAbility
'
)
.
onClick
(()
=>
{
let
connectionId
:
number
=
1
// 在通过connectServiceExtensionAbility绑定服务时返回的Id
this
.
context
.
disconnectServiceExtensionAbility
(
connectionId
).
then
(()
=>
{
console
.
info
(
'
disconnectServiceExtensionAbility success
'
);
console
.
info
(
'
disconnectServiceExtensionAbility success
'
);
}).
catch
((
e
rror
)
=>
{
}).
catch
((
error
:
BusinessE
rror
)
=>
{
console
.
error
(
'
disconnectServiceExtensionAbility failed
'
);
console
.
error
(
'
disconnectServiceExtensionAbility failed
'
);
})
})
})
}
}
```
```
...
@@ -340,29 +425,30 @@
...
@@ -340,29 +425,30 @@
2. 导入UIAbility模块。
2. 导入UIAbility模块。
```ts
```ts
import Ability from '@ohos.app.ability.UIAbility';
import
UI
Ability from '@ohos.app.ability.UIAbility';
```
```
3. 定义约定的序列化数据。
3. 定义约定的序列化数据。
调用端及被调用端发送接收的数据格式需协商一致,如下示例约定数据由number和string组成。
调用端及被调用端发送接收的数据格式需协商一致,如下示例约定数据由number和string组成。
```ts
```ts
import rpc from '@ohos.rpc'
export default class MyParcelable {
export default class MyParcelable {
num: number = 0;
num: number = 0;
str: string = "";
str: string = "";
constructor(num
,
string) {
constructor(num
: number, string:
string) {
this.num = num;
this.num = num;
this.str = string;
this.str = string;
}
}
marshalling(messageSequence) {
marshalling(messageSequence
: rpc.MessageParcel
) {
messageSequence.writeInt(this.num);
messageSequence.writeInt(this.num);
messageSequence.writeString(this.str);
messageSequence.writeString(this.str);
return true;
return true;
}
}
unmarshalling(messageSequence) {
unmarshalling(messageSequence
: rpc.MessageParcel
) {
this.num = messageSequence.readInt();
this.num = messageSequence.readInt();
this.str = messageSequence.readString();
this.str = messageSequence.readString();
return true;
return true;
...
@@ -373,24 +459,28 @@
...
@@ -373,24 +459,28 @@
如下示例在Ability的onCreate注册MSG_SEND_METHOD监听,在onDestroy取消监听,收到序列化数据后作相应处理并返回。应用开发者根据实际业务需要做相应处理。
如下示例在Ability的onCreate注册MSG_SEND_METHOD监听,在onDestroy取消监听,收到序列化数据后作相应处理并返回。应用开发者根据实际业务需要做相应处理。
```ts
```ts
import rpc from '@ohos.rpc';
import Want from '@ohos.app.ability.Want';
import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
const TAG: string = '[CalleeAbility]';
const TAG: string = '[CalleeAbility]';
const MSG_SEND_METHOD: string = 'CallSendMsg';
const MSG_SEND_METHOD: string = 'CallSendMsg';
function sendMsgCallback(data
)
{
function sendMsgCallback(data
: rpc.MessageSequence): MyParcelable
{
console.info('CalleeSortFunc called');
console.info('CalleeSortFunc called');
// 获取Caller发送的序列化数据
// 获取Caller发送的序列化数据
let receivedData = new MyParcelable(0, '');
let receivedData
: MyParcelable
= new MyParcelable(0, '');
data.readParcelable(receivedData);
data.readParcelable(receivedData);
console.info(`receiveData[${receivedData.num}, ${receivedData.str}]`);
console.info(`receiveData[${receivedData.num}, ${receivedData.str}]`);
// 作相应处理
// 作相应处理
// 返回序列化数据result给Caller
// 返回序列化数据result给Caller
return new MyParcelable(
receivedData.num
+ 1, `send ${receivedData.str} succeed`);
return new MyParcelable(
Number(receivedData.num)
+ 1, `send ${receivedData.str} succeed`);
}
}
export default class CalleeAbility extends Ability {
export default class CalleeAbility extends
UI
Ability {
onCreate(want
, l
aunchParam) {
onCreate(want
: Want, launchParam: AbilityConstant.L
aunchParam) {
try {
try {
this.callee.on(MSG_SEND_METHOD, sendMsgCallback);
this.callee.on(MSG_SEND_METHOD, sendMsgCallback);
} catch (error) {
} catch (error) {
...
@@ -412,16 +502,20 @@
...
@@ -412,16 +502,20 @@
1.
导入UIAbility模块。
1.
导入UIAbility模块。
```
ts
```
ts
import
Ability
from
'
@ohos.app.ability.UIAbility
'
;
import
UI
Ability
from
'
@ohos.app.ability.UIAbility
'
;
```
```
2.
获取Caller通信接口。
2.
获取Caller通信接口。
Ability的context属性实现了startAbilityByCall方法,用于获取指定通用组件的Caller通信接口。如下示例通过this.context获取Ability实例的context属性,使用startAbilityByCall拉起Callee被调用端并获取Caller通信接口,注册Caller的onRelease和onRemoteStateChange监听。应用开发者根据实际业务需要做相应处理。
Ability的context属性实现了startAbilityByCall方法,用于获取指定通用组件的Caller通信接口。如下示例通过this.context获取Ability实例的context属性,使用startAbilityByCall拉起Callee被调用端并获取Caller通信接口,注册Caller的onRelease和onRemoteStateChange监听。应用开发者根据实际业务需要做相应处理。
```ts
```ts
import UIAbility, { Caller } from '@ohos.app.ability.UIAbility';
import { BusinessError } from '@ohos.base';
export default class EntryAbility extends UIAbility {
// ...
async onButtonGetRemoteCaller() {
async onButtonGetRemoteCaller() {
var caller =
undefined;
let caller: Caller |
undefined;
var
context = this.context;
let
context = this.context;
context.startAbilityByCall({
context.startAbilityByCall({
deviceId: getRemoteDeviceId(),
deviceId: getRemoteDeviceId(),
...
@@ -445,10 +539,12 @@
...
@@ -445,10 +539,12 @@
console.info('Caller.onRemoteStateChange catch error, error.code: ${JSON.stringify(error.code)}, error.message: ${JSON.stringify(error.message)}');
console.info('Caller.onRemoteStateChange catch error, error.code: ${JSON.stringify(error.code)}, error.message: ${JSON.stringify(error.message)}');
}
}
}
}
}).catch((e
rror) => {
}).catch((error: BusinessE
rror) => {
console.error(`get remote caller failed with ${error}`);
console.error(`get remote caller failed with ${error}`);
})
})
}
}
// ...
}
```
```
getRemoteDeviceId方法参照[通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据](#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据)。
getRemoteDeviceId方法参照[通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据](#通过跨设备启动uiability和serviceextensionability组件实现多端协同无返回数据)。
...
@@ -457,49 +553,72 @@
...
@@ -457,49 +553,72 @@
1.
向被调用端发送Parcelable数据有两种方式,一种是不带返回值,一种是获取被调用端返回的数据,method以及序列化数据需要与被调用端协商一致。如下示例调用Call接口,向Callee被调用端发送数据。
1.
向被调用端发送Parcelable数据有两种方式,一种是不带返回值,一种是获取被调用端返回的数据,method以及序列化数据需要与被调用端协商一致。如下示例调用Call接口,向Callee被调用端发送数据。
```
ts
```
ts
import
UIAbility
,
{
Caller
}
from
'
@ohos.app.ability.UIAbility
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
const
MSG_SEND_METHOD
:
string
=
'
CallSendMsg
'
;
const
MSG_SEND_METHOD
:
string
=
'
CallSendMsg
'
;
export
default
class
EntryAbility
extends
UIAbility
{
// ...
caller
:
Caller
|
undefined
;
async
onButtonCall
()
{
async
onButtonCall
()
{
try
{
try
{
let
msg
=
new
MyParcelable
(
1
,
'
origin_Msg
'
);
let
msg
:
MyParcelable
=
new
MyParcelable
(
1
,
'
origin_Msg
'
);
if
(
this
.
caller
)
{
await
this
.
caller
.
call
(
MSG_SEND_METHOD
,
msg
);
await
this
.
caller
.
call
(
MSG_SEND_METHOD
,
msg
);
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
info
(
`caller call failed with
${
error
}
`
);
console
.
info
(
`caller call failed with
${
error
}
`
);
}
}
}
}
// ...
}
```
```
2.
如下示例调用CallWithResult接口,向Callee被调用端发送待处理的数据originMsg,并将’CallSendMsg’方法处理完毕的数据赋值给backMsg。
2.
如下示例调用CallWithResult接口,向Callee被调用端发送待处理的数据originMsg,并将’CallSendMsg’方法处理完毕的数据赋值给backMsg。
```
ts
```
ts
import
UIAbility
,
{
Caller
}
from
'
@ohos.app.ability.UIAbility
'
;
import
rpc
from
'
@ohos.rpc
'
;
const
MSG_SEND_METHOD
:
string
=
'
CallSendMsg
'
;
const
MSG_SEND_METHOD
:
string
=
'
CallSendMsg
'
;
originMsg
:
string
=
''
;
let
originMsg
:
string
=
''
;
backMsg
:
string
=
''
;
let
backMsg
:
string
=
''
;
async
onButtonCallWithResult
(
originMsg
,
backMsg
)
{
export
default
class
EntryAbility
extends
UIAbility
{
// ...
caller
:
Caller
|
undefined
;
async
onButtonCallWithResult
(
originMsg
:
string
,
backMsg
:
string
)
{
try
{
try
{
let
msg
=
new
MyParcelable
(
1
,
originMsg
);
let
msg
:
MyParcelable
=
new
MyParcelable
(
1
,
originMsg
);
if
(
this
.
caller
)
{
const
data
=
await
this
.
caller
.
callWithResult
(
MSG_SEND_METHOD
,
msg
);
const
data
=
await
this
.
caller
.
callWithResult
(
MSG_SEND_METHOD
,
msg
);
console
.
info
(
'
caller callWithResult succeed
'
);
console
.
info
(
'
caller callWithResult succeed
'
);
let
result
:
MyParcelable
=
new
MyParcelable
(
0
,
''
);
let
result
=
new
MyParcelable
(
0
,
''
);
data
.
readParcelable
(
result
);
data
.
readParcelable
(
result
);
backMsg
(
result
.
str
)
;
backMsg
=
result
.
str
;
console
.
info
(
`caller result is [
${
result
.
num
}
,
${
result
.
str
}
]`
);
console
.
info
(
`caller result is [
${
result
.
num
}
,
${
result
.
str
}
]`
);
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
info
(
`caller callWithResult failed with
${
error
}
`
);
console
.
info
(
`caller callWithResult failed with
${
error
}
`
);
}
}
}
}
// ...
}
```
```
6.
释放Caller通信接口。
6.
释放Caller通信接口。
Caller不再使用后,应用开发者可以通过release接口释放Caller。
Caller不再使用后,应用开发者可以通过release接口释放Caller。
```
ts
```
ts
import
UIAbility
,
{
Caller
}
from
'
@ohos.app.ability.UIAbility
'
;
export
default
class
EntryAbility
extends
UIAbility
{
caller
:
Caller
|
undefined
;
releaseCall
()
{
releaseCall
()
{
try
{
try
{
if
(
this
.
caller
)
{
this
.
caller
.
release
();
this
.
caller
.
release
();
this
.
caller
=
undefined
this
.
caller
=
undefined
;
}
console
.
info
(
'
caller release succeed
'
);
console
.
info
(
'
caller release succeed
'
);
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
info
(
`caller release failed with
${
error
}
`
);
console
.
info
(
`caller release failed with
${
error
}
`
);
}
}
}
}
}
```
```
zh-cn/application-dev/reference/apis/js-apis-continuation-continuationManager.md
浏览文件 @
897fca57
...
@@ -43,7 +43,8 @@ register(callback: AsyncCallback\<number>): void;
...
@@ -43,7 +43,8 @@ register(callback: AsyncCallback\<number>): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
let
token
:
number
=
-
1
;
continuationManager
.
register
((
err
,
data
)
=>
{
continuationManager
.
register
((
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
...
@@ -85,11 +86,13 @@ register(options: ContinuationExtraParams, callback: AsyncCallback\<number>): vo
...
@@ -85,11 +86,13 @@ register(options: ContinuationExtraParams, callback: AsyncCallback\<number>): vo
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
let
continuationExtraParams
=
{
let
token
:
number
=
-
1
;
continuationManager
.
register
(
{
deviceType
:
[
"
00E
"
]
deviceType
:
[
"
00E
"
]
};
},
continuationManager
.
register
(
continuationExtraParams
,
(
err
,
data
)
=>
{
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
return
;
return
;
...
@@ -135,16 +138,14 @@ register(options?: ContinuationExtraParams): Promise\<number>;
...
@@ -135,16 +138,14 @@ register(options?: ContinuationExtraParams): Promise\<number>;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
let
continuationExtraParams
=
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
deviceType
:
[
"
00E
"
]
let
token
:
number
=
-
1
;
};
continuationManager
.
register
(
continuationManager
.
register
(
continuationExtraParams
)
{
deviceType
:
[
"
00E
"
]
}).
then
((
data
)
=>
{
.
then
((
data
)
=>
{
console
.
info
(
'
register finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
register finished,
'
+
JSON
.
stringify
(
data
));
token
=
data
;
token
=
data
;
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
register failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
```
```
...
@@ -177,7 +178,8 @@ registerContinuation(callback: AsyncCallback\<number>): void;
...
@@ -177,7 +178,8 @@ registerContinuation(callback: AsyncCallback\<number>): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
let
token
:
number
=
-
1
;
try
{
try
{
continuationManager
.
registerContinuation
((
err
,
data
)
=>
{
continuationManager
.
registerContinuation
((
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
...
@@ -221,12 +223,14 @@ registerContinuation(options: ContinuationExtraParams, callback: AsyncCallback\<
...
@@ -221,12 +223,14 @@ registerContinuation(options: ContinuationExtraParams, callback: AsyncCallback\<
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
let
token
:
number
=
-
1
;
deviceType
:
[
"
00E
"
]
};
try
{
try
{
continuationManager
.
registerContinuation
(
continuationExtraParams
,
(
err
,
data
)
=>
{
continuationManager
.
registerContinuation
(
{
deviceType
:
[
"
00E
"
]
},
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
registerContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
registerContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
return
;
return
;
...
@@ -273,17 +277,17 @@ registerContinuation(options?: ContinuationExtraParams): Promise\<number>;
...
@@ -273,17 +277,17 @@ registerContinuation(options?: ContinuationExtraParams): Promise\<number>;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
-
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
deviceType
:
[
"
00E
"
]
let
token
:
number
=
-
1
;
};
try
{
try
{
continuationManager
.
register
(
continuationExtraParams
)
continuationManager
.
register
(
.
then
((
data
)
=>
{
{
deviceType
:
[
"
00E
"
]
}).
then
((
data
)
=>
{
console
.
info
(
'
registerContinuation finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
registerContinuation finished,
'
+
JSON
.
stringify
(
data
));
token
=
data
;
token
=
data
;
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
registerContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
registerContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -324,6 +328,7 @@ on(type: "deviceConnect", callback: Callback\<ContinuationResult>): void;
...
@@ -324,6 +328,7 @@ on(type: "deviceConnect", callback: Callback\<ContinuationResult>): void;
**示例:**
**示例:**
```
ts
```
ts
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
continuationManager
.
on
(
"
deviceConnect
"
,
(
data
)
=>
{
continuationManager
.
on
(
"
deviceConnect
"
,
(
data
)
=>
{
console
.
info
(
'
onDeviceConnect deviceId:
'
+
JSON
.
stringify
(
data
.
id
));
console
.
info
(
'
onDeviceConnect deviceId:
'
+
JSON
.
stringify
(
data
.
id
));
console
.
info
(
'
onDeviceConnect deviceType:
'
+
JSON
.
stringify
(
data
.
type
));
console
.
info
(
'
onDeviceConnect deviceType:
'
+
JSON
.
stringify
(
data
.
type
));
...
@@ -363,6 +368,7 @@ on(type: "deviceDisconnect", callback: Callback\<string>): void;
...
@@ -363,6 +368,7 @@ on(type: "deviceDisconnect", callback: Callback\<string>): void;
**示例:**
**示例:**
```
ts
```
ts
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
continuationManager
.
on
(
"
deviceDisconnect
"
,
(
data
)
=>
{
continuationManager
.
on
(
"
deviceDisconnect
"
,
(
data
)
=>
{
console
.
info
(
'
onDeviceDisconnect deviceId:
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
onDeviceDisconnect deviceId:
'
+
JSON
.
stringify
(
data
));
});
});
...
@@ -400,6 +406,7 @@ off(type: "deviceConnect", callback?: Callback\<ContinuationResult>): void;
...
@@ -400,6 +406,7 @@ off(type: "deviceConnect", callback?: Callback\<ContinuationResult>): void;
**示例:**
**示例:**
```
ts
```
ts
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
continuationManager
.
off
(
"
deviceConnect
"
,
(
data
)
=>
{
continuationManager
.
off
(
"
deviceConnect
"
,
(
data
)
=>
{
console
.
info
(
'
onDeviceConnect deviceId:
'
+
JSON
.
stringify
(
data
.
id
));
console
.
info
(
'
onDeviceConnect deviceId:
'
+
JSON
.
stringify
(
data
.
id
));
console
.
info
(
'
onDeviceConnect deviceType:
'
+
JSON
.
stringify
(
data
.
type
));
console
.
info
(
'
onDeviceConnect deviceType:
'
+
JSON
.
stringify
(
data
.
type
));
...
@@ -439,6 +446,7 @@ off(type: "deviceDisconnect", callback?: Callback\<string>): void;
...
@@ -439,6 +446,7 @@ off(type: "deviceDisconnect", callback?: Callback\<string>): void;
**示例:**
**示例:**
```
ts
```
ts
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
continuationManager
.
off
(
"
deviceDisconnect
"
,
(
data
)
=>
{
continuationManager
.
off
(
"
deviceDisconnect
"
,
(
data
)
=>
{
console
.
info
(
'
onDeviceDisconnect deviceId:
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
onDeviceDisconnect deviceId:
'
+
JSON
.
stringify
(
data
));
});
});
...
@@ -475,7 +483,8 @@ on(type: "deviceSelected", token: number, callback: Callback\<Array\<Continuatio
...
@@ -475,7 +483,8 @@ on(type: "deviceSelected", token: number, callback: Callback\<Array\<Continuatio
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
try
{
try
{
continuationManager
.
on
(
"
deviceSelected
"
,
token
,
(
data
)
=>
{
continuationManager
.
on
(
"
deviceSelected
"
,
token
,
(
data
)
=>
{
console
.
info
(
'
onDeviceSelected len:
'
+
data
.
length
);
console
.
info
(
'
onDeviceSelected len:
'
+
data
.
length
);
...
@@ -521,7 +530,8 @@ on(type: "deviceUnselected", token: number, callback: Callback\<Array\<Continuat
...
@@ -521,7 +530,8 @@ on(type: "deviceUnselected", token: number, callback: Callback\<Array\<Continuat
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
try
{
try
{
continuationManager
.
on
(
"
deviceUnselected
"
,
token
,
(
data
)
=>
{
continuationManager
.
on
(
"
deviceUnselected
"
,
token
,
(
data
)
=>
{
console
.
info
(
'
onDeviceUnselected len:
'
+
data
.
length
);
console
.
info
(
'
onDeviceUnselected len:
'
+
data
.
length
);
...
@@ -567,7 +577,8 @@ off(type: "deviceSelected", token: number): void;
...
@@ -567,7 +577,8 @@ off(type: "deviceSelected", token: number): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
try
{
try
{
continuationManager
.
off
(
"
deviceSelected
"
,
token
);
continuationManager
.
off
(
"
deviceSelected
"
,
token
);
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -605,7 +616,8 @@ off(type: "deviceUnselected", token: number): void;
...
@@ -605,7 +616,8 @@ off(type: "deviceUnselected", token: number): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
try
{
try
{
continuationManager
.
off
(
"
deviceUnselected
"
,
token
);
continuationManager
.
off
(
"
deviceUnselected
"
,
token
);
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -646,7 +658,8 @@ startDeviceManager(token: number, callback: AsyncCallback\<void>): void;
...
@@ -646,7 +658,8 @@ startDeviceManager(token: number, callback: AsyncCallback\<void>): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
continuationManager
.
startDeviceManager
(
token
,
(
err
,
data
)
=>
{
continuationManager
.
startDeviceManager
(
token
,
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
...
@@ -690,11 +703,14 @@ startDeviceManager(token: number, options: ContinuationExtraParams, callback: As
...
@@ -690,11 +703,14 @@ startDeviceManager(token: number, options: ContinuationExtraParams, callback: As
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
let
token
:
number
=
1
;
continuationManager
.
startDeviceManager
(
token
,
{
deviceType
:
[
"
00E
"
]
deviceType
:
[
"
00E
"
]
};
},
continuationManager
.
startDeviceManager
(
token
,
continuationExtraParams
,
(
err
,
data
)
=>
{
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
return
;
return
;
...
@@ -742,15 +758,16 @@ startDeviceManager(token: number, options?: ContinuationExtraParams): Promise\<v
...
@@ -742,15 +758,16 @@ startDeviceManager(token: number, options?: ContinuationExtraParams): Promise\<v
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
-
1
;
continuationManager
.
startDeviceManager
(
token
,
{
deviceType
:
[
"
00E
"
]
deviceType
:
[
"
00E
"
]
};
}).
then
((
data
)
=>
{
continuationManager
.
startDeviceManager
(
token
,
continuationExtraParams
)
.
then
((
data
)
=>
{
console
.
info
(
'
startDeviceManager finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
startDeviceManager finished,
'
+
JSON
.
stringify
(
data
));
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
startDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
```
```
...
@@ -784,7 +801,8 @@ startContinuationDeviceManager(token: number, callback: AsyncCallback\<void>): v
...
@@ -784,7 +801,8 @@ startContinuationDeviceManager(token: number, callback: AsyncCallback\<void>): v
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
-
1
;
try
{
try
{
continuationManager
.
startContinuationDeviceManager
(
token
,
(
err
,
data
)
=>
{
continuationManager
.
startContinuationDeviceManager
(
token
,
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
...
@@ -828,12 +846,15 @@ startContinuationDeviceManager(token: number, options: ContinuationExtraParams,
...
@@ -828,12 +846,15 @@ startContinuationDeviceManager(token: number, options: ContinuationExtraParams,
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
let
token
:
number
=
-
1
;
deviceType
:
[
"
00E
"
]
};
try
{
try
{
continuationManager
.
startContinuationDeviceManager
(
token
,
continuationExtraParams
,
(
err
,
data
)
=>
{
continuationManager
.
startContinuationDeviceManager
(
token
,
{
deviceType
:
[
"
00E
"
]
},
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
startContinuationDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
startContinuationDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
return
;
return
;
...
@@ -880,16 +901,17 @@ startContinuationDeviceManager(token: number, options?: ContinuationExtraParams)
...
@@ -880,16 +901,17 @@ startContinuationDeviceManager(token: number, options?: ContinuationExtraParams)
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
continuationExtraParams
=
{
import
{
BusinessError
}
from
'
@ohos.base
'
;
deviceType
:
[
"
00E
"
]
let
token
:
number
=
-
1
;
};
try
{
try
{
continuationManager
.
startContinuationDeviceManager
(
token
,
continuationExtraParams
)
continuationManager
.
startContinuationDeviceManager
(
.
then
((
data
)
=>
{
token
,
{
deviceType
:
[
"
00E
"
]
}).
then
((
data
)
=>
{
console
.
info
(
'
startContinuationDeviceManager finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
startContinuationDeviceManager finished,
'
+
JSON
.
stringify
(
data
));
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
startContinuationDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
startContinuationDeviceManager failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -932,7 +954,8 @@ updateConnectStatus(token: number, deviceId: string, status: DeviceConnectState,
...
@@ -932,7 +954,8 @@ updateConnectStatus(token: number, deviceId: string, status: DeviceConnectState,
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
-
1
;
let
deviceId
:
string
=
"
test deviceId
"
;
let
deviceId
:
string
=
"
test deviceId
"
;
continuationManager
.
updateConnectStatus
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
,
(
err
,
data
)
=>
{
continuationManager
.
updateConnectStatus
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
,
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
...
@@ -983,13 +1006,15 @@ updateConnectStatus(token: number, deviceId: string, status: DeviceConnectState)
...
@@ -983,13 +1006,15 @@ updateConnectStatus(token: number, deviceId: string, status: DeviceConnectState)
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
1
;
let
deviceId
:
string
=
"
test deviceId
"
;
let
deviceId
:
string
=
"
test deviceId
"
;
continuationManager
.
updateConnectStatus
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
)
continuationManager
.
updateConnectStatus
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
)
.
then
((
data
)
=>
{
.
then
((
data
)
=>
{
console
.
info
(
'
updateConnectStatus finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
updateConnectStatus finished,
'
+
JSON
.
stringify
(
data
));
})
})
.
catch
((
err
)
=>
{
.
catch
((
err
:
BusinessError
)
=>
{
console
.
error
(
'
updateConnectStatus failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
updateConnectStatus failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
```
```
...
@@ -1025,7 +1050,8 @@ updateContinuationState(token: number, deviceId: string, status: DeviceConnectSt
...
@@ -1025,7 +1050,8 @@ updateContinuationState(token: number, deviceId: string, status: DeviceConnectSt
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
let
deviceId
:
string
=
"
test deviceId
"
;
let
deviceId
:
string
=
"
test deviceId
"
;
try
{
try
{
continuationManager
.
updateContinuationState
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
,
(
err
,
data
)
=>
{
continuationManager
.
updateContinuationState
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
,
(
err
,
data
)
=>
{
...
@@ -1076,14 +1102,16 @@ updateContinuationState(token: number, deviceId: string, status: DeviceConnectSt
...
@@ -1076,14 +1102,16 @@ updateContinuationState(token: number, deviceId: string, status: DeviceConnectSt
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
1
;
let
deviceId
:
string
=
"
test deviceId
"
;
let
deviceId
:
string
=
"
test deviceId
"
;
try
{
try
{
continuationManager
.
updateContinuationState
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
)
continuationManager
.
updateContinuationState
(
token
,
deviceId
,
continuationManager
.
DeviceConnectState
.
CONNECTED
)
.
then
((
data
)
=>
{
.
then
((
data
)
=>
{
console
.
info
(
'
updateContinuationState finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
updateContinuationState finished,
'
+
JSON
.
stringify
(
data
));
})
})
.
catch
((
err
)
=>
{
.
catch
((
err
:
BusinessError
)
=>
{
console
.
error
(
'
updateContinuationState failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
updateContinuationState failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
}
catch
(
err
)
{
}
catch
(
err
)
{
...
@@ -1122,7 +1150,8 @@ unregister(token: number, callback: AsyncCallback\<void>): void;
...
@@ -1122,7 +1150,8 @@ unregister(token: number, callback: AsyncCallback\<void>): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
let
token
:
number
=
1
;
continuationManager
.
unregister
(
token
,
(
err
,
data
)
=>
{
continuationManager
.
unregister
(
token
,
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
console
.
error
(
'
unregister failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
unregister failed, cause:
'
+
JSON
.
stringify
(
err
));
...
@@ -1167,12 +1196,13 @@ unregister(token: number): Promise\<void>;
...
@@ -1167,12 +1196,13 @@ unregister(token: number): Promise\<void>;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
1
;
continuationManager
.
unregister
(
token
)
continuationManager
.
unregister
(
token
)
.
then
((
data
)
=>
{
.
then
((
data
)
=>
{
console
.
info
(
'
unregister finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
unregister finished,
'
+
JSON
.
stringify
(
data
));
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
unregister failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
unregister failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
```
```
...
@@ -1206,7 +1236,9 @@ unregisterContinuation(token: number, callback: AsyncCallback\<void>): void;
...
@@ -1206,7 +1236,9 @@ unregisterContinuation(token: number, callback: AsyncCallback\<void>): void;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
1
;
try
{
try
{
continuationManager
.
unregisterContinuation
(
token
,
(
err
,
data
)
=>
{
continuationManager
.
unregisterContinuation
(
token
,
(
err
,
data
)
=>
{
if
(
err
.
code
!=
0
)
{
if
(
err
.
code
!=
0
)
{
...
@@ -1254,13 +1286,13 @@ unregisterContinuation(token: number): Promise\<void>;
...
@@ -1254,13 +1286,13 @@ unregisterContinuation(token: number): Promise\<void>;
**示例:**
**示例:**
```
ts
```
ts
let
token
=
1
;
import
continuationManager
from
'
@ohos.continuation.continuationManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
token
:
number
=
-
1
;
try
{
try
{
continuationManager
.
unregisterContinuation
(
token
)
continuationManager
.
unregisterContinuation
(
token
).
then
((
data
)
=>
{
.
then
((
data
)
=>
{
console
.
info
(
'
unregisterContinuation finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
unregisterContinuation finished,
'
+
JSON
.
stringify
(
data
));
})
}).
catch
((
err
:
BusinessError
)
=>
{
.
catch
((
err
)
=>
{
console
.
error
(
'
unregisterContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
console
.
error
(
'
unregisterContinuation failed, cause:
'
+
JSON
.
stringify
(
err
));
});
});
}
catch
(
err
)
{
}
catch
(
err
)
{
...
...
zh-cn/application-dev/reference/apis/js-apis-distributedMissionManager.md
浏览文件 @
897fca57
...
@@ -35,32 +35,33 @@ registerMissionListener(parameter: MissionDeviceInfo, options: MissionCallback,
...
@@ -35,32 +35,33 @@ registerMissionListener(parameter: MissionDeviceInfo, options: MissionCallback,
**示例:**
**示例:**
```
ts
```
ts
function
NotifyMissionsChanged
(
deviceId
)
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
function
NotifyMissionsChanged
(
deviceId
:
string
):
void
{
console
.
log
(
'
NotifyMissionsChanged deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyMissionsChanged deviceId
'
+
JSON
.
stringify
(
deviceId
));
}
}
function
NotifySnapshot
(
deviceId
,
missionId
)
{
function
NotifySnapshot
(
deviceId
:
string
,
missionId
:
number
):
void
{
console
.
log
(
'
NotifySnapshot deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifySnapshot deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifySnapshot missionId
'
+
JSON
.
stringify
(
missionId
));
console
.
log
(
'
NotifySnapshot missionId
'
+
JSON
.
stringify
(
missionId
));
}
}
function
NotifyNetDisconnect
(
deviceId
,
state
)
{
function
NotifyNetDisconnect
(
deviceId
:
string
,
state
:
number
):
void
{
console
.
log
(
'
NotifyNetDisconnect deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyNetDisconnect deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyNetDisconnect state
'
+
JSON
.
stringify
(
state
));
console
.
log
(
'
NotifyNetDisconnect state
'
+
JSON
.
stringify
(
state
));
}
}
var
parameter
=
{
try
{
deviceId
:
""
distributedMissionManager
.
registerMissionListener
(
};
{
deviceId
:
""
},
var
options
=
{
{
notifyMissionsChanged
:
NotifyMissionsChanged
,
notifyMissionsChanged
:
NotifyMissionsChanged
,
notifySnapshot
:
NotifySnapshot
,
notifySnapshot
:
NotifySnapshot
,
notifyNetDisconnect
:
NotifyNetDisconnect
notifyNetDisconnect
:
NotifyNetDisconnect
}
},
try
{
(
error
:
BusinessError
)
=>
{
distributedMissionManager
.
registerMissionListener
(
parameter
,
options
,
(
error
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
console
.
info
(
'
registerMissionListener finished
'
)
console
.
info
(
'
registerMissionListener finished
'
)
})
})
;
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -91,30 +92,29 @@ registerMissionListener(parameter: MissionDeviceInfo, options: MissionCallback):
...
@@ -91,30 +92,29 @@ registerMissionListener(parameter: MissionDeviceInfo, options: MissionCallback):
**示例:**
**示例:**
```
ts
```
ts
function
NotifyMissionsChanged
(
deviceId
)
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
function
NotifyMissionsChanged
(
deviceId
:
string
):
void
{
console
.
log
(
'
NotifyMissionsChanged deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyMissionsChanged deviceId
'
+
JSON
.
stringify
(
deviceId
));
}
}
function
NotifySnapshot
(
deviceId
,
missionId
)
{
function
NotifySnapshot
(
deviceId
:
string
,
missionId
:
number
):
void
{
console
.
log
(
'
NotifySnapshot deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifySnapshot deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifySnapshot missionId
'
+
JSON
.
stringify
(
missionId
));
console
.
log
(
'
NotifySnapshot missionId
'
+
JSON
.
stringify
(
missionId
));
}
}
function
NotifyNetDisconnect
(
deviceId
,
state
)
{
function
NotifyNetDisconnect
(
deviceId
:
string
,
state
:
number
):
void
{
console
.
log
(
'
NotifyNetDisconnect deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyNetDisconnect deviceId
'
+
JSON
.
stringify
(
deviceId
));
console
.
log
(
'
NotifyNetDisconnect state
'
+
JSON
.
stringify
(
state
));
console
.
log
(
'
NotifyNetDisconnect state
'
+
JSON
.
stringify
(
state
));
}
}
var
parameter
=
{
try
{
d
eviceId
:
""
d
istributedMissionManager
.
registerMissionListener
(
};
{
deviceId
:
""
},
var
options
=
{
{
notifyMissionsChanged
:
NotifyMissionsChanged
,
notifyMissionsChanged
:
NotifyMissionsChanged
,
notifySnapshot
:
NotifySnapshot
,
notifySnapshot
:
NotifySnapshot
,
notifyNetDisconnect
:
NotifyNetDisconnect
notifyNetDisconnect
:
NotifyNetDisconnect
}
}).
then
((
data
:
void
)
=>
{
try
{
distributedMissionManager
.
registerMissionListener
(
parameter
,
options
)
.
then
(
data
=>
{
console
.
info
(
'
registerMissionListener finished,
'
+
JSON
.
stringify
(
data
));
console
.
info
(
'
registerMissionListener finished,
'
+
JSON
.
stringify
(
data
));
}).
catch
(
error
=>
{
}).
catch
(
(
error
:
BusinessError
)
=>
{
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
registerMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -142,11 +142,12 @@ unRegisterMissionListener(parameter: MissionDeviceInfo, callback: AsyncCallback&
...
@@ -142,11 +142,12 @@ unRegisterMissionListener(parameter: MissionDeviceInfo, callback: AsyncCallback&
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
deviceId
:
""
import
{
BusinessError
}
from
'
@ohos.base
'
;
};
try
{
try
{
distributedMissionManager
.
unRegisterMissionListener
(
parameter
,
(
error
)
=>
{
distributedMissionManager
.
unRegisterMissionListener
(
{
deviceId
:
""
},
(
error
:
BusinessError
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
unRegisterMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
unRegisterMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -182,14 +183,12 @@ unRegisterMissionListener(parameter: MissionDeviceInfo): Promise<void>
...
@@ -182,14 +183,12 @@ unRegisterMissionListener(parameter: MissionDeviceInfo): Promise<void>
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
deviceId
:
""
import
{
BusinessError
}
from
'
@ohos.base
'
;
};
try
{
try
{
distributedMissionManager
.
unRegisterMissionListener
(
parameter
)
distributedMissionManager
.
unRegisterMissionListener
({
deviceId
:
""
}).
then
(()
=>
{
.
then
(
data
=>
{
console
.
info
(
'
unRegisterMissionListener finished successfully
'
);
console
.
info
(
'
unRegisterMissionListener finished,
'
+
JSON
.
stringify
(
data
));
}).
catch
((
error
:
BusinessError
)
=>
{
}).
catch
(
error
=>
{
console
.
error
(
'
unRegisterMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
unRegisterMissionListener failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -217,18 +216,21 @@ startSyncRemoteMissions(parameter: MissionParameter, callback: AsyncCallback<
...
@@ -217,18 +216,21 @@ startSyncRemoteMissions(parameter: MissionParameter, callback: AsyncCallback<
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
try
{
distributedMissionManager
.
startSyncRemoteMissions
(
{
deviceId
:
""
,
deviceId
:
""
,
fixConflict
:
false
,
fixConflict
:
false
,
tag
:
0
tag
:
0
};
},
try
{
(
error
:
BusinessError
)
=>
{
distributedMissionManager
.
startSyncRemoteMissions
(
parameter
,
(
error
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
console
.
info
(
'
startSyncRemoteMissions finished
'
)
console
.
info
(
'
startSyncRemoteMissions finished
'
)}
}
)
)
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -259,16 +261,18 @@ startSyncRemoteMissions(parameter: MissionParameter): Promise<void>
...
@@ -259,16 +261,18 @@ startSyncRemoteMissions(parameter: MissionParameter): Promise<void>
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
try
{
distributedMissionManager
.
startSyncRemoteMissions
(
{
deviceId
:
""
,
deviceId
:
""
,
fixConflict
:
false
,
fixConflict
:
false
,
tag
:
0
tag
:
0
};
}
try
{
).
then
(()
=>
{
distributedMissionManager
.
startSyncRemoteMissions
(
parameter
)
console
.
info
(
'
startSyncRemoteMissions finished successfully
'
);
.
then
(
data
=>
{
}).
catch
((
error
:
BusinessError
)
=>
{
console
.
info
(
'
startSyncRemoteMissions finished,
'
+
JSON
.
stringify
(
data
));
}).
catch
(
error
=>
{
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
startSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -296,16 +300,19 @@ stopSyncRemoteMissions(parameter: MissionDeviceInfo, callback: AsyncCallback<
...
@@ -296,16 +300,19 @@ stopSyncRemoteMissions(parameter: MissionDeviceInfo, callback: AsyncCallback<
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
deviceId
:
""
import
{
BusinessError
}
from
'
@ohos.base
'
;
};
try
{
try
{
distributedMissionManager
.
stopSyncRemoteMissions
(
parameter
,
(
error
)
=>
{
distributedMissionManager
.
stopSyncRemoteMissions
(
{
deviceId
:
""
},
(
error
:
BusinessError
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
console
.
info
(
'
stopSyncRemoteMissions finished
'
)
console
.
info
(
'
stopSyncRemoteMissions finished
'
)}
}
)
)
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -336,14 +343,15 @@ stopSyncRemoteMissions(parameter: MissionDeviceInfo): Promise<void>
...
@@ -336,14 +343,15 @@ stopSyncRemoteMissions(parameter: MissionDeviceInfo): Promise<void>
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
deviceId
:
""
import
{
BusinessError
}
from
'
@ohos.base
'
;
};
try
{
try
{
distributedMissionManager
.
stopSyncRemoteMissions
(
parameter
)
distributedMissionManager
.
stopSyncRemoteMissions
(
.
then
(
data
=>
{
{
console
.
info
(
'
stopSyncRemoteMissions finished,
'
+
JSON
.
stringify
(
data
));
deviceId
:
""
}).
catch
(
error
=>
{
}).
then
((
data
:
void
)
=>
{
console
.
info
(
'
stopSyncRemoteMissions finished successfully
'
);
}).
catch
((
error
:
BusinessError
)
=>
{
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
stopSyncRemoteMissions failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -385,20 +393,21 @@ continueMission(parameter: ContinueDeviceInfo, options: ContinueCallback, callba
...
@@ -385,20 +393,21 @@ continueMission(parameter: ContinueDeviceInfo, options: ContinueCallback, callba
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
function
onContinueDone
(
resultCode
:
number
):
void
{
console
.
log
(
'
onContinueDone resultCode:
'
+
JSON
.
stringify
(
resultCode
));
};
try
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
""
,
srcDeviceId
:
""
,
dstDeviceId
:
""
,
dstDeviceId
:
""
,
missionId
:
1
,
missionId
:
1
,
wantParam
:
{
"
key
"
:
"
value
"
}
wantParam
:
{
"
key
"
:
"
value
"
}
};
},
function
onContinueDone
(
resultCode
)
{
{
onContinueDone
:
onContinueDone
},
console
.
log
(
'
onContinueDone resultCode:
'
+
JSON
.
stringify
(
resultCode
));
(
error
:
BusinessError
)
=>
{
};
var
options
=
{
onContinueDone
:
onContinueDone
};
try
{
distributedMissionManager
.
continueMission
(
parameter
,
options
,
(
error
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -448,23 +457,22 @@ continueMission(parameter: ContinueDeviceInfo, options: ContinueCallback): Promi
...
@@ -448,23 +457,22 @@ continueMission(parameter: ContinueDeviceInfo, options: ContinueCallback): Promi
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
function
onContinueDone
(
resultCode
:
number
):
void
{
console
.
log
(
'
onContinueDone resultCode:
'
+
JSON
.
stringify
(
resultCode
));
};
try
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
""
,
srcDeviceId
:
""
,
dstDeviceId
:
""
,
dstDeviceId
:
""
,
missionId
:
1
,
missionId
:
1
,
wantParam
:
{
"
key
"
:
"
value
"
}
wantParam
:
{
"
key
"
:
"
value
"
}
};
},
function
onContinueDone
(
resultCode
)
{
{
onContinueDone
:
onContinueDone
}).
then
(()
=>
{
console
.
log
(
'
onContinueDone resultCode:
'
+
JSON
.
stringify
(
resultCode
));
console
.
info
(
'
continueMission finished successfully
'
);
};
}).
catch
((
error
:
BusinessError
)
=>
{
var
options
=
{
onContinueDone
:
onContinueDone
};
try
{
distributedMissionManager
.
continueMission
(
parameter
,
options
)
.
then
(
data
=>
{
console
.
info
(
'
continueMission finished,
'
+
JSON
.
stringify
(
data
));
}).
catch
(
error
=>
{
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -505,14 +513,17 @@ continueMission(parameter: ContinueMissionInfo, callback: AsyncCallback<void&
...
@@ -505,14 +513,17 @@ continueMission(parameter: ContinueMissionInfo, callback: AsyncCallback<void&
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
try
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
""
,
srcDeviceId
:
""
,
dstDeviceId
:
""
,
dstDeviceId
:
""
,
bundleName
:
"
ohos.test.continueapp
"
,
bundleName
:
"
ohos.test.continueapp
"
,
wantParam
:
{
"
key
"
:
"
value
"
}
wantParam
:
{
"
key
"
:
"
value
"
}
};
},
try
{
(
error
:
BusinessError
)
=>
{
distributedMissionManager
.
continueMission
(
parameter
,
(
error
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
@@ -561,17 +572,19 @@ continueMission(parameter: ContinueMissionInfo): Promise<void>
...
@@ -561,17 +572,19 @@ continueMission(parameter: ContinueMissionInfo): Promise<void>
**示例:**
**示例:**
```
ts
```
ts
var
parameter
=
{
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
import
{
BusinessError
}
from
'
@ohos.base
'
;
try
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
""
,
srcDeviceId
:
""
,
dstDeviceId
:
""
,
dstDeviceId
:
""
,
bundleName
:
"
ohos.test.continueapp
"
,
bundleName
:
"
ohos.test.continueapp
"
,
wantParam
:
{
"
key
"
:
"
value
"
}
wantParam
:
{
"
key
"
:
"
value
"
}
};
}
try
{
).
then
(()
=>
{
distributedMissionManager
.
continueMission
(
parameter
)
console
.
info
(
'
continueMission finished successfully
'
);
.
then
(
data
=>
{
}).
catch
((
error
:
BusinessError
)
=>
{
console
.
info
(
'
continueMission finished,
'
+
JSON
.
stringify
(
data
));
}).
catch
(
error
=>
{
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
));
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
));
})
})
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -599,12 +612,13 @@ on(type: 'continueStateChange', callback: Callback<{ state: ContinueState, i
...
@@ -599,12 +612,13 @@ on(type: 'continueStateChange', callback: Callback<{ state: ContinueState, i
**示例:**
**示例:**
```
js
```
js
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
try
{
try
{
distributedMissionManager
.
on
(
'
continueStateChange
'
,
(
data
)
=>
{
distributedMissionManager
.
on
(
'
continueStateChange
'
,
(
data
)
=>
{
console
.
info
(
"
continueStateChange on:
"
+
JSON
.
stringify
(
data
));
console
.
info
(
"
continueStateChange on:
"
+
JSON
.
stringify
(
data
));
});
});
}
catch
(
err
)
{
}
catch
(
err
or
)
{
console
.
error
(
"
continueStateChange err
Code:
"
+
err
.
code
+
"
,errMessage:
"
+
err
.
message
);
console
.
error
(
"
continueStateChange err
:
"
+
JSON
.
stringify
(
error
)
);
}
}
```
```
...
@@ -628,12 +642,13 @@ off(type: 'continueStateChange', callback?: Callback<{ state: ContinueState,
...
@@ -628,12 +642,13 @@ off(type: 'continueStateChange', callback?: Callback<{ state: ContinueState,
**示例:**
**示例:**
```
js
```
js
import distributedMissionManager from '@ohos.distributedMissionManager'
try {
try {
distributedMissionManager.off('continueStateChange', (data) => {
distributedMissionManager.off('continueStateChange', (data) => {
console.info("continueStateChange o
n
:" + JSON.stringify(data));
console.info("continueStateChange o
ff
:" + JSON.stringify(data));
});
});
} catch (err) {
} catch (err) {
console.error("continueStateChange err
Code:" + err.code + ",errMessage:" + err.message
);
console.error("continueStateChange err
: " + JSON.stringify(error)
);
}
}
```
```
...
...
zh-cn/application-dev/reference/apis/js-apis-inner-application-continuableInfo.md
浏览文件 @
897fca57
...
@@ -25,13 +25,13 @@ import distributedMissionManager from '@ohos.distributedMissionManager';
...
@@ -25,13 +25,13 @@ import distributedMissionManager from '@ohos.distributedMissionManager';
**示例:**
**示例:**
```
js
```
js
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
try
{
try
{
distributedMissionManager
.
on
(
'
continueStateChange
'
,
(
data
)
=>
{
distributedMissionManager
.
on
(
'
continueStateChange
'
,
(
data
)
=>
{
console
.
info
(
"
continueStateChange on:
"
+
JSON
.
stringify
(
data
));
console
.
info
(
"
continueStateChange on:
"
+
JSON
.
stringify
(
data
));
});
});
}
catch
(
err
)
{
}
catch
(
err
)
{
console
.
error
(
"
continueStateChange errCode:
"
+
err
.
code
+
"
,errMessage:
"
+
err
.
message
);
console
.
error
(
"
continueStateChange err:
"
+
JSON
.
stringify
(
err
));
}
}
```
```
\ No newline at end of file
\ No newline at end of file
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueCallback.md
浏览文件 @
897fca57
...
@@ -26,23 +26,22 @@ Mission迁移完成后调用,返回迁移结果。
...
@@ -26,23 +26,22 @@ Mission迁移完成后调用,返回迁移结果。
```
ts
```
ts
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
let
continueDeviceInfo
=
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
'
123
'
,
srcDeviceId
:
'
123
'
,
dstDeviceId
:
'
456
'
,
dstDeviceId
:
'
456
'
,
missionId
:
123
,
missionId
:
123
,
wantParam
:
{
wantParam
:
{
'
key
'
:
'
value
'
'
key
'
:
'
value
'
}
}
};
},
{
let
continueCallback
=
{
onContinueDone
(
result
)
{
onContinueDone
(
result
)
{
console
.
log
(
'
onContinueDone, result: ${JSON.stringify(result)}
'
);
console
.
log
(
'
onContinueDone, result: ${JSON.stringify(result)}
'
);
}
}
};
},
(
error
:
BusinessError
)
=>
{
distributedMissionManager
.
continueMission
(
continueDeviceInfo
,
continueCallback
,
(
error
)
=>
{
if
(
error
&&
error
.
code
)
{
if
(
error
&&
error
.
code
)
{
console
.
error
(
'
continueMission failed, error.code: ${error.code}, error.message: ${error.message}
'
);
console
.
error
(
'
continueMission failed, error.code: ${error.code}, error.message: ${error.message}
'
);
}
}
...
...
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueDeviceInfo.md
浏览文件 @
897fca57
...
@@ -24,22 +24,20 @@
...
@@ -24,22 +24,20 @@
```
ts
```
ts
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
let
continueDeviceInfo
=
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
'
123
'
,
srcDeviceId
:
'
123
'
,
dstDeviceId
:
'
456
'
,
dstDeviceId
:
'
456
'
,
missionId
:
123
,
missionId
:
123
,
wantParam
:
{
wantParam
:
{
'
key
'
:
'
value
'
'
key
'
:
'
value
'
}
}
};
},
{
let
continueCallback
=
{
onContinueDone
(
result
):
void
{
onContinueDone
(
result
)
{
console
.
log
(
'
onContinueDone, result: ${JSON.stringify(result)}
'
);
console
.
log
(
'
onContinueDone, result: ${JSON.stringify(result)}
'
);
}
}
};
},
(
error
)
=>
{
distributedMissionManager
.
continueMission
(
continueDeviceInfo
,
continueCallback
,
(
error
)
=>
{
if
(
error
&&
error
.
code
)
{
if
(
error
&&
error
.
code
)
{
console
.
error
(
'
continueMission failed, error.code: ${error.code}, error.message: ${error.message}
'
);
console
.
error
(
'
continueMission failed, error.code: ${error.code}, error.message: ${error.message}
'
);
}
}
...
...
zh-cn/application-dev/reference/apis/js-apis-inner-application-continueMissionInfo.md
浏览文件 @
897fca57
...
@@ -28,15 +28,16 @@ import distributedMissionManager from '@ohos.distributedMissionManager';
...
@@ -28,15 +28,16 @@ import distributedMissionManager from '@ohos.distributedMissionManager';
```
ts
```
ts
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
distributedMissionManager
from
'
@ohos.distributedMissionManager
'
;
import
{
BusinessError
}
from
'
@ohos.base
'
;
var
parameter
=
{
try
{
distributedMissionManager
.
continueMission
(
{
srcDeviceId
:
""
,
srcDeviceId
:
""
,
dstDeviceId
:
""
,
dstDeviceId
:
""
,
bundleName
:
"
ohos.test.continueapp
"
,
bundleName
:
"
ohos.test.continueapp
"
,
wantParam
:
{
"
key
"
:
"
value
"
}
wantParam
:
{
"
key
"
:
"
value
"
}
};
},
(
error
:
BusinessError
)
=>
{
try
{
distributedMissionManager
.
continueMission
(
parameter
,
(
error
)
=>
{
if
(
error
.
code
!=
0
)
{
if
(
error
.
code
!=
0
)
{
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
console
.
error
(
'
continueMission failed, cause:
'
+
JSON
.
stringify
(
error
))
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录