HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去
HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去
我尝试使用了startAbility
和continueAbility
两种方式来进行跨设备FA启动和跨设备FA迁移,代码如下:
/**
* 展示设备选择弹窗,弹窗上展示所有支持分布式的设备,用户选择设备后可以进行跨设备迁移
*/
private void showDeviceDialog() {
DeviceDialog deviceDialog = new DeviceDialog(getContext(), deviceInfo -> {
continueAbility(deviceInfo.getDeviceId());
// startRemotePage(deviceInfo.getDeviceId());
});
deviceDialog.show();
}
/**
* 跨设备启动 FA 页面
*
* @param remoteDeviceId 远程设备 ID
*/
private void startRemotePage(String remoteDeviceId) {
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId(remoteDeviceId)
.withBundleName(getBundleName())
.withAbilityName(MainAbility.class.getName())
.withAction(Constants.ACTION_REMOTE)
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
// 使用 Intent 唤起远程端 FA
startAbility(intent);
}
这样的代码在super device的“手机+手机”和“手机+平板”两种模拟器上都可以正常拉起另外一个设备上的页面,在我自己的两部鸿蒙手机上也可以互相拉起。
但是在我的手机和平板之间就失效,虽然两台设备可以获取到对方的DeviceInfo,但是却无法拉起页面,又试了一下在两台平板真机设备上运行这个项目,发现也是一样无法成功进行跨设备启动或迁移,感觉是平板在跨设备这一块存在BUG,求大神解答~
在手机上和平板上运行效果如下图:
附config.json文件如下:
{
"app": {
"bundleName": "com.remoteservicedemo",
"vendor": "hi",
"version": {
"code": 1000000,
"name": "1.0.0"
}
},
"deviceConfig": {},
"module": {
"package": "com.remoteservicedemo",
"name": ".MyApplication",
"mainAbility": "com.remoteservicedemo.MainAbility",
"deviceType": [
"phone",
"tablet"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "entry",
"moduleType": "entry",
"installationFree": false
},
"abilities": [
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home",
"action.remote"
]
}
],
"orientation": "unspecified",
"name": "com.remoteservicedemo.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "$string:entry_MainAbility",
"type": "page",
"visible": true,
"launchType": "standard"
},
{
"name": "com.remoteservicedemo.ServiceAbility",
"icon": "$media:icon",
"description": "$string:serviceability_description",
"type": "service"
}
],
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC"
},
{
"name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
}
]
}
}
求大神解答~~~
更多关于HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我的可以了,是因为没有加权限,
因为你代码中没有申请跨设备迁移的权限,
申请了,这种错误太低级了,不会犯的
我是参考这个文档的,是可以的,用的是mate30pro 和matepadpro2021 10.8 ,不过要注意 接口中所有的实现方法都要返回true:
onStartContinuation()
onSaveData()
onRestoreData()
onCompleteContinuation()
LZ解决了吗?我也是遇到一样的问题,2个手机之间都很正常,但是手机和平板就不行。
BundleManager::queryAbilityByIntent and flags failed, result is 8519798
楼主你好,请提供一下真机型号和系统版本信息,方便开发定位问题。
手机:
- Mate 40E
- 型号:OCE-AL50
- 系统版本:2.0.0.168(C00E160R8P2)
平板:
- MatePad 11
- 型号:DBY-W09
- 系统版本:2.0.0.188(C00E180R1P12patch01)
请问该问题定位到否?解决否?
试一下加多一个参数connection:
private IRemoteObject remoteObject;
private IAbilityConnection connection = new IAbilityConnection() {
@Override
public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int i) {
remoteObject = iRemoteObject;
}
@Override
public void onAbilityDisconnectDone(ElementName elementName, int i) {
}
};
Intent intentService = new Intent();
Operation operation = new Intent.OperationBuilder()
.withDeviceId(deviceId)
.withBundleName(getBundleName())
.withAbilityName(SendServiceAbility.class.getName())
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intentService.setOperation(operation);
connectAbility(intentService, connection);
很喜欢HarmonyOS的卡片式设计,信息一目了然,操作也更便捷。
为什么要搞connection?这里只是想在另外一台平板上拉起一个Page,不是要连接到Service。
欢迎开发小伙伴们进来帮帮楼主
针对帖子标题“HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去”的问题,可能的原因及解决方案如下:
可能原因:
- 设备兼容性问题:确保手机和平板均支持HarmonyOS系统,并且系统版本满足跨设备迁移的要求。
- 网络连接问题:跨设备迁移需要稳定的网络连接。请检查设备是否连接至同一Wi-Fi网络,并确保网络信号良好。
- 迁移权限设置:检查设备上的迁移权限设置,确保已允许相关应用进行跨设备迁移。
- 迁移数据量过大:若迁移数据量过大,可能导致迁移过程缓慢或失败。建议分批次迁移数据。
解决方案:
- 更新系统:确保手机和平板均已更新至最新的HarmonyOS系统版本。
- 检查网络连接:重启路由器或更换网络环境,确保设备间网络连接稳定。
- 调整迁移设置:在设备设置中检查并调整迁移相关权限。
- 分批迁移数据:尝试将需要迁移的数据分批进行,以减少单次迁移的数据量。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。