分布式跨设备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
待解决
相关问题
分布式跨设备组件启动有几种场景?
291浏览 • 1回复 待解决
Hi3516进行分布式流转无法获取设备?
7278浏览 • 2回复 待解决
openharmony分布式设备认证-账号认证的可能
1888浏览 • 0回复 待解决
HarmonyOS 同应用跨设备数据同步(分布式)开发中,想知道目前跟谁连接上
25浏览 • 0回复 待解决
如何基于HarmonyOS的分布式文件系统,打造跨设备的云存储与访问服务?
30浏览 • 0回复 待解决
分布式通信子系统内有主从设备关系绑定吗
9294浏览 • 1回复 待解决
#鸿蒙学习大百科#分布式数据对象什么时候才可以进行跨设备同步?
153浏览 • 1回复 待解决
liteos-a的分布式软总线的设备发现api是什么
8314浏览 • 2回复 待解决
#鸿蒙学习大百科#为什么A设备的a应用与B设备的b应用无法进行分布式对象的同步?
148浏览 • 1回复 待解决
HarmonyOS NEXT如何通过增强分布式软总线技术提升设备间通信效率?
455浏览 • 1回复 待解决
分布式软总线可以实现,跨网络,远程互联么?
6123浏览 • 2回复 已解决
Harmonyos 分布式迁移失败
3041浏览 • 0回复 待解决
7月2号:目前的分布式功能支持跨账号了吗?
7583浏览 • 2回复 待解决
使用文件管理器选择文件并放到分布式目录
321浏览 • 1回复 待解决
分布式跟踪如何实现?
359浏览 • 1回复 待解决
Redis 模板的分布式锁
3003浏览 • 1回复 待解决
分布式是怎么启用的?
5100浏览 • 1回复 待解决
#鸿蒙学习大百科#如何接收其他设备通过分布式对象同步的资产?
142浏览 • 1回复 待解决
#鸿蒙学习大百科#如何通过分布式对象将资产同步到其他设备?
139浏览 • 1回复 待解决
分布式存储数据的方法
329浏览 • 1回复 待解决
求解Redis 分布式锁问题?
3677浏览 • 1回复 待解决
分布式数据库,最多能支持多少个设备直接进行同步?
1535浏览 • 1回复 待解决
PolarDB分布式架构有什么特点?
3448浏览 • 1回复 待解决
#鸿蒙学习大百科#如何访问其他设备下同一应用的分布式文件?
176浏览 • 2回复 待解决
分布式数据管理没有了吗?
3027浏览 • 1回复 待解决
同时麻烦问一下最新的Dev如何使用openHarmony的接口,我再新建项目时没有看到使用harmonyos还是openHarmony的接口,还是说这2个没区别呢,