HarmonyOS-鸿蒙app开发 —基于java_流转_HarmonyOS端发起跨端迁移_跨端迁移常见问题

HarmonyOS-鸿蒙app开发 —基于java_流转_HarmonyOS端发起跨端迁移_跨端迁移常见问题

注册流转任务管理服务成功后,无法推荐设备或选择设备列表接口未返回任何设备

现象描述

注册流转任务管理服务成功后,无对应的推荐设备。调用选择设备列表接口,未返回任何设备。

可能原因

设备过滤条件不对,将设备过滤掉了。

解决办法

检查设备过滤条件,具体过滤条件参数说明,可以参考开发指导接口说明中ExtraParams说明

在选择设备列表选择设备,并调用更新设备连接状态的接口后,列表中设备连接状态没有刷新

现象描述

在选择设备列表选择设备,并调用更新设备连接状态的接口后,列表中设备连接状态没有刷新。

可能原因

没有在UI主线程中调用更新设备连接状态的接口,导致界面内容不刷新。

解决办法

检查是否在UI主线程中调用更新设备连接状态接口。

设备不支持流转任务管理服务时如何实现跨端迁移

这种情况下实现跨端迁移时,需要指定对端设备的deviceId。开发者可通过设备管理类DeviceManager提供的getTrustedDeviceList接口,获取指定条件下匿名化处理的设备列表。getTrustedDeviceList可参考ohos.distributedhardware.devicemanager.DeviceManager的API描述。

之后,开发者需要自行实现流转任务管理,即设备选择、流转状态管理等。

操作步骤如下。

在对应的config.json文件中,声明获取设备列表及设备信息的权限。

{

“reqPermissions”: [

{

“name”: “ohos.permission.DISTRIBUTED_DATASYNC”,

“reason”: “need”,

“usedScene”: {

“ability”: [

“MainAbility”

],

“when”: “inuse”

}

},

{

“name”: “com.huawei.permission.ACCESS_SERVICE_DM”,

“reason”: “need”,

“usedScene”: {

“ability”: [

“MainAbility”

],

“when”: “inuse”

}

}

]

}

通过getTrustedDeviceList接口获取设备列表,用于指定目标设备。

// 设备列表按最近使用排序

int MOST_RECENTLY_USED = 0;

// 获取设备管理类

ohos.distributedhardware.devicemanager.DeviceManager devManager;

 

// ISelectResult是一个自定义接口,用来处理指定设备deviceId后执行的行为

interface ISelectResult {

void onSelectResult(String deviceId);

}

 

@Override

public void onStart(Intent intent) {

….

// 调用DeviceManager的getTrustedDeviceList接口获取在线设备列表

ohos.distributedhardware.devicemanager.DeviceManager.createInstance(new ohos.distributedhardware.devicemanager.DeviceManager.DeviceManagerCallback() {

@Override

public void onGet(ohos.distributedhardware.devicemanager.DeviceManager deviceManager) {

devManager = deviceManager;

}

 

@Override

public void onDied() {

HiLog.info(LABEL_LOG, “DeviceManager onDied call.”);

}

});

}

 

// 获取设备列表,开发者可在获取的在线设备列表中选择目标设备执行操作

private void scheduleRemoteAbility(ISelectResult listener) {

Map<String, Object> filter = new HashMap<>();

filter.put(ohos.distributedhardware.devicemanager.DeviceManager.TARGET_PACKAGE_NAME, BUNDLE_NAME);

filter.put(ohos.distributedhardware.devicemanager.DeviceManager.SORT_TYPE, MOST_RECENTLY_USED);

if (devManager ==null) {

HiLog.info(LABEL_LOG, “scheduleRemoteAbility devManager is null”);

return;

}

List<DeviceInfo> onlineDevices = devManager.getTrustedDeviceList(BUNDLE_NAME, filter);

// 判断组网设备是否为空

if (onlineDevices.isEmpty()) {

listener.onSelectResult(null);

return;

}

int numDevices = onlineDevices.size();

List<String> deviceIds = new ArrayList<>(numDevices);

onlineDevices.forEach((device) -> {

deviceIds.add(device.getNetworkId());

});

// 以选择首个设备作为目标设备为例

// 开发者也可按照具体场景,通过其它方式进行设备选择

String selectedDeviceId = deviceIds.get(0);

listener.onSelectResult(selectedDeviceId);

}

实现跨端迁移。

// 跨设备迁移FA

// 本地FA设置当前运行任务

private ClickedListener mContinueAbilityListener = new ClickedListener() {

@Override

public void onClick(Component arg0) {

// 用户选择设备后实现业务迁移

scheduleRemoteAbility(new ISelectResult() {

@Override

public void onSelectResult(String deviceId) {

continueAbility(deviceId);

}

});

}

};

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com