You need to sign in or sign up before continuing.
未验证 提交 3124ab81 编写于 作者: O openharmony_ci 提交者: Gitee

!22190 添加missionCenter demo指导

Merge pull request !22190 from liuxiaowei42/master
# 多端协同(仅对系统应用开放) # 多端协同
## 功能描述 ## 功能描述
...@@ -56,29 +56,31 @@ ...@@ -56,29 +56,31 @@
3. 获取目标设备的设备ID。 3. 获取目标设备的设备ID。
```ts ```ts
import deviceManager from '@ohos.distributedHardware.deviceManager'; import deviceManager from '@ohos.distributedDeviceManager';
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 errCode:" + err.code + ",errMessage:" + err.message);
} }
dmClass = dm
})
} }
function getRemoteDeviceId() { function getRemoteDeviceId() {
if (typeof dmClass === 'object' && dmClass !== null) { if (typeof dmClass === 'object' && dmClass !== null) {
let list = dmClass.getTrustedDeviceListSync() let list = dmClass.getAvailableDeviceListSync();
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');
} }
} }
``` ```
...@@ -89,8 +91,8 @@ ...@@ -89,8 +91,8 @@
let want = { let want = {
deviceId: getRemoteDeviceId(), deviceId: getRemoteDeviceId(),
bundleName: 'com.example.myapplication', bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility', abilityName: 'EntryAbility',
moduleName: 'module1', // moduleName非必选 moduleName: 'entry', // moduleName非必选
} }
// context为发起端UIAbility的AbilityContext // context为发起端UIAbility的AbilityContext
this.context.startAbility(want).then(() => { this.context.startAbility(want).then(() => {
...@@ -100,7 +102,7 @@ ...@@ -100,7 +102,7 @@
}) })
``` ```
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 = { let want = {
...@@ -216,7 +218,7 @@ ...@@ -216,7 +218,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失败的回调。
...@@ -471,8 +473,8 @@ ...@@ -471,8 +473,8 @@
```ts ```ts
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) { async onButtonCallWithResult(originMsg, backMsg) {
try { try {
let msg = new MyParcelable(1, originMsg); let msg = new MyParcelable(1, originMsg);
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
- **流转** - **流转**
在OpenHarmony中泛指跨多设备的分布式操作。流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如邮件跨设备编辑、多设备协同健身、多屏游戏等分布式业务。流转为开发者提供更广的使用场景和更新的产品视角,强化产品优势,实现体验升级。流转按照使用场景可分为**跨端迁移****多端协同** 在OpenHarmony中泛指跨多设备的分布式操作。流转能力打破设备界限,多设备联动,使用户应用程序可分可合、可流转,实现如跨设备编辑邮件、多设备协同健身、多屏游戏等分布式业务。流转为开发者提供更广的使用场景和更新的产品视角,强化产品优势,实现体验升级。流转按照使用场景可分为**跨端迁移****多端协同**
- **跨端迁移** - **跨端迁移**
...@@ -20,12 +20,15 @@ ...@@ -20,12 +20,15 @@
- **多端协同** - **多端协同**
用户拥有的多个设备,可以作为一个整体,为用户提供比单设备更加高效、沉浸的体验,这就是多端协同场景。常见的多端协同场景实例:场景一:两台设备A和B打开备忘录同一篇笔记进行双端协同编辑,在设备A上可以使用本地图库中的图片资源插入编辑,设备B上进行文字内容编辑。场景二:设备A上正在和客户进行聊天,客户需要的资料在设备B上,可以通过聊天软件打开设备B上的文档应用选择到想要的资料回传到设备A上,然后通过聊天软件发送给客户。在应用开发层面,多端协同指多端上的不同UIAbility/ServiceExtensionAbility同时运行、或者交替运行实现完整的业务;或者多端上的相同UIAbility/ServiceExtensionAbility同时运行实现完整的业务。 用户拥有的多个设备,可以作为一个整体,为用户提供比单设备更加高效、沉浸的体验,这就是多端协同场景。常见的多端协同场景实例:
- 场景一:两台设备A和B打开备忘录同一篇笔记进行双端协同编辑,在设备A上可以使用本地图库中的图片资源插入编辑,设备B上进行文字内容编辑。
- 场景二:设备A上正在和客户进行聊天,客户需要的资料在设备B上,可以通过聊天软件打开设备B上的文档应用选择到想要的资料回传到设备A上,然后通过聊天软件发送给客户。在应用开发层面,多端协同指多端上的不同UIAbility/ServiceExtensionAbility同时运行、或者交替运行实现完整的业务;或者多端上的相同UIAbility/ServiceExtensionAbility同时运行实现完整的业务。
## 流转架构 ## 流转架构
OpenHarmony流转提供了一组API库,可让用户应用程序更轻松、快捷地完成流转体验。OpenHarmony流转架构有如下优势: OpenHarmony流转提供了可以流转的能力,可让用户应用程序更轻松、快捷地完成流转体验。OpenHarmony流转架构有如下优势:
- 支持远程服务调用等能力,可轻松设计业务。 - 支持远程服务调用等能力,可轻松设计业务。
...@@ -39,9 +42,9 @@ OpenHarmony流转提供了一组API库,可让用户应用程序更轻松、快 ...@@ -39,9 +42,9 @@ OpenHarmony流转提供了一组API库,可让用户应用程序更轻松、快
![hop-structure](figures/hop-structure.png) ![hop-structure](figures/hop-structure.png)
- 跨端迁移任务管理:在迁移发起端,接受用户迁移的意图,提供迁移流转入口,迁移结果显示等能力。(该能力尚未构建。) - 跨端迁移任务管理:在迁移发起端,接受用户迁移的意图,提供迁移流转入口,迁移结果显示等能力。
- 多端协同任务管理:在协同发起端,接受用户应用程序注册,提供协同入口、状态显示、退出流转等管理能力。(该能力尚未构建。) - 多端协同任务管理:在协同发起端,接受用户应用程序注册,提供协同入口、状态显示、退出流转等管理能力。
- 分布式组件管理服务:提供远程服务启动、远程服务连接、远程迁移等能力,并通过不同能力组合,支撑用户应用程序完成跨端迁移或多端协同的业务体验。 - 分布式组件管理服务:提供远程服务启动、远程服务连接、远程迁移等能力,并通过不同能力组合,支撑用户应用程序完成跨端迁移或多端协同的业务体验。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册