分布式跨设备hap无法弹出选择设备弹窗
首先我通过@ohos.abilityAccessCtrl模块向用户申请使用多设备协同的权限,然后使用@ohos.continuation.continuationManager模块的registerContinuation方法获取token和注册,之后使用startContinuationDeviceManager方法想要拉起设备选择弹窗,但是该接口错误码提示"code":16600001,不知道该如何解决,部分代码如下
import continuationManager from '@ohos.continuation.continuationManager'
import hiTraceChain from '@ohos.hiTraceChain';
import hiTraceMeter from '@ohos.hiTraceMeter';
import hilog from '@ohos.hilog';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
const permissions: Array<Permissions> = ['ohos.permission.DISTRIBUTED_DATASYNC'];
@Entry
@Component
struct Index {
reqPermissionsFromUser(permissions: Array<Permissions>): void {
let context = getContext(this) as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
let grantStatus: Array<number> = data.authResults;
let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] === 0) {
// 用户授权,可以继续访问目标操作
} else {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
return;
}
}
hilog.error(0x00000, "%s", "MMMMMMMMM success");
}).catch((err) => {
console.error(`requestPermissionsFromUser failed, code is ${err.code}, message is ${err.message}`);
})
}
@State message: string = 'Hello World'
textInputValue: string = ''
@State progressValue: number = 0
token: number = -1;
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button("获取流转权限")
.onClick(()=>{
this.reqPermissionsFromUser(permissions)
})
.margin(20)
.width('100%')
.height('100')
Button("注册token")
.onClick(()=>{
try {
continuationManager.registerContinuation((err, data) => {
if (err.code != 0) {
console.error('MMMMMM registerContinuation failed, cause: ' + JSON.stringify(err));
return;
}
console.info('MMMMMM registerContinuation finished, ' + JSON.stringify(data));
this.token = data;
});
} catch (err) {
console.error('MMMMMM registerContinuation catch failed, cause: ' + JSON.stringify(err));
}
})
.margin(20)
.width('100%')
.height('100')
Button("选择设备")
.onClick(()=>{
let remoteDeviceId: string = ""; // 用于保存用户选择的远端设备信息,后续使用其完成跨端迁移或多端协同操作
try {
// 参数token为注册token
continuationManager.on("deviceSelected", this.token, (continuationResults) => {
console.info('registerDeviceSelectedCallback len: ' + continuationResults.length);
if (continuationResults.length <= 0) {
console.info('no selected device');
return;
}
remoteDeviceId = continuationResults[0].id; // 将选择的第一个远端设备deviceId赋值给remoteDeviceId变量
for (let i = 0; i < continuationResults.length; ++i) {
console.log("remoteDeviceId " + continuationResults[0].id)
}
// 将remoteDeviceId参数传给want
let want = {
deviceId: remoteDeviceId,
bundleName: 'ohos.samples.continuationmanager',
abilityName: 'MainAbility'
};
globalThis.abilityContext.startAbility(want).then((data) => {
console.info('StartRemoteAbility finished, ' + JSON.stringify(data));
}).catch((err) => {
console.error('StartRemoteAbility failed, cause: ' + JSON.stringify(err));
});
});
} catch (err) {
console.error('on failed, cause: ' + JSON.stringify(err));
}
if (canIUse("SystemCapability.Ability.DistributedAbilityManager")) {
console.log("MMMMM 该设备支持SystemCapability.Ability.DistributedAbilityManager");
} else {
console.log("MMMMM 该设备不支持SystemCapability.Ability.DistributedAbilityManager");
}
try {
console.error("MMMMMM token: " + this.token)
continuationManager.startContinuationDeviceManager(this.token, (err, data) => {
if (err.code != 0) {
console.error('MMMMMM startContinuationDeviceManager failed, cause: ' + JSON.stringify(err));
return;
}
console.info('MMMMMM startContinuationDeviceManager finished, ' + JSON.stringify(data));
});
} catch (err) {
console.error('MMMMMM startContinuationDeviceManager failed, cause: ' + JSON.stringify(err));
}
// continuationManager.unregisterContinuation(this.token, (err, data) =>{})
})
.margin(20)
.width('100%')
.height('100')
}
.width('100%')
}
.height('100%')
}
}
申请的权限如下:
其中abilities中的"test"申请的系统权限是"SystemCapability.Ability.DistributedAbilityManager"
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone",
"tablet"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:main_pages",
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
},
{
"name": "test",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:test",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
],
"requestPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "$string:reason",
"usedScene": {
"abilities": [
"FormAbility"
],
"when": "inuse"
}
}
]
}
}
我只是想简单测试并实现下跨设备相关的一些简单应用,请大佬指点一下,非常感谢。
分布式
流转
跨设备
continuationMana
赞
收藏 0
回答 1
待解决
相关问题
跨设备分布式数据同步的底层实现
625浏览 • 0回复 待解决
分布式跨设备组件启动有几种场景?
1458浏览 • 1回复 待解决
Hi3516进行分布式流转无法获取设备?
9224浏览 • 2回复 待解决
鸿蒙的分布式数据管理如何支持跨设备数据同步?
554浏览 • 0回复 待解决
鸿蒙的分布式能力如何支持跨设备的用户界面同步?
587浏览 • 0回复 待解决
HarmonyOS如何实现跨设备分布式数据同步?遇到冲突怎么解决?
847浏览 • 0回复 待解决
鸿蒙应用调用分布式能力时,跨设备调用超时如何排查?
821浏览 • 0回复 待解决
HarmonyOS NEXT的分布式软总线(SoftBus)如何实现跨设备通信?
795浏览 • 1回复 已解决
鸿蒙的分布式能力如何支持跨设备的多模态交互?
475浏览 • 0回复 待解决
如何调用鸿蒙的分布式能力?例如跨设备数据传输
574浏览 • 0回复 待解决
openharmony分布式设备认证-账号认证的可能
3296浏览 • 0回复 待解决
鸿蒙分布式架构如何实现多设备协同?
640浏览 • 0回复 待解决
#鸿蒙通关秘籍#分布式跨设备组件启动时,需要哪些权限?
1166浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用鸿蒙分布式文件系统实现跨设备文件拷贝?
1464浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过鸿蒙分布式文件系统实现跨设备文件访问?
1354浏览 • 1回复 待解决
分布式硬件池化技术解析:如何实现跨设备GPU/NPU算力动态调度?
892浏览 • 1回复 待解决
HarmonyOS 同应用跨设备数据同步(分布式)开发中,想知道目前跟谁连接上
1431浏览 • 1回复 待解决
如何利用HarmonyOS的分布式文件系统,实现跨设备的文件共享和管理?
620浏览 • 0回复 待解决
元服务如何兼容非分布式能力的旧设备?
563浏览 • 0回复 待解决
如何基于HarmonyOS的分布式文件系统,打造跨设备的云存储与访问服务?
1214浏览 • 0回复 待解决
分布式通信子系统内有主从设备关系绑定吗
10881浏览 • 1回复 待解决
分布式调用链路追踪困难,如何整合多设备日志?
615浏览 • 1回复 待解决
鸿蒙系统的分布式软总线如何实现设备间通信?
1859浏览 • 1回复 待解决
#鸿蒙学习大百科#分布式数据对象什么时候才可以进行跨设备同步?
1159浏览 • 1回复 待解决
liteos-a的分布式软总线的设备发现api是什么
9869浏览 • 2回复 待解决
同时麻烦问一下最新的Dev如何使用openHarmony的接口,我再新建项目时没有看到使用harmonyos还是openHarmony的接口,还是说这2个没区别呢,