HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 手机和平板跨设备迁移不过去 我尝试使用了startAbilitycontinueAbility两种方式来进行跨设备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,求大神解答~

在手机上和平板上运行效果如下图:

Screenshot_20210901_094224_com.huawei.remoteservicedemo.jpg

Screenshot_20210901_094222_com.huawei.remoteservicedemo.jpg

附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

14 回复

我的也不行唉

更多关于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

回到顶部