HarmonyOS 鸿蒙Next中uniapp内使用webview引入HTML页面进行语音通话,需要保证息屏或者后台情况下,语音通话不被打断

HarmonyOS 鸿蒙Next中uniapp内使用webview引入HTML页面进行语音通话,需要保证息屏或者后台情况下,语音通话不被打断

使用场景是:uniapp内使用webview引入HTML页面进行语音通话,需要保证息屏或者后台情况下,语音通话不被打断,使用这个方案: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/continuous-task 需要通过uts插件的形式去调用吗?


更多关于HarmonyOS 鸿蒙Next中uniapp内使用webview引入HTML页面进行语音通话,需要保证息屏或者后台情况下,语音通话不被打断的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

【解决方案】

需要使用uts插件桥接,在uniapp生命周期onHide时开启长时任务

export function startContinuousTask() {
  let uiabilitycontext = UTSHarmony.getUIAbilityContext() as common.UIAbilityContext;
  let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
  let wantAgentInfo : wantAgent.WantAgentInfo = {
    wants: [
      {
        bundleName: bundleManager.getBundleInfoForSelfSync(bundleFlags).name
        abilityName: bundleManager.getBundleInfoForSelfSync(bundleFlags).name + ".entryAbility"
      }
    ],
    actionType: wantAgent.OperationType.START_ABILITY,
    requestCode: 0,
    wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
  };

  wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj : WantAgent) => {
    backgroundTaskManager.startBackgroundRunning(uiabilitycontext,
      backgroundTaskManager.BackgroundMode.VOIP, wantAgentObj).then(() => {
        hilog.info(DOMAIN, CommonConstants.LOG_TAG, 'Succeeded in operation startBackgroundRunning.');
      }).catch((err : BusinessError) => {
        hilog.error(DOMAIN, CommonConstants.LOG_TAG, 'Failed to operation startBackgroundRunning. %{public}s', JSON.stringify(err));
      });
  }).catch((err : BusinessError) => {
    hilog.error(DOMAIN, CommonConstants.LOG_TAG, 'Failed to operation getWantAgent. %{public}s', JSON.stringify(err));
  });
}

export function stopContinuousTask(context : common.UIAbilityContext) {
  let uiabilitycontext = UTSHarmony.getUIAbilityContext() as common.UIAbilityContext;
  backgroundTaskManager.stopBackgroundRunning(uiabilitycontext).then(() => {
    hilog.info(DOMAIN, CommonConstants.LOG_TAG, 'Succeeded in operation stopBackgroundRunning.');
  }).catch((err : BusinessError) => {
    hilog.error(DOMAIN, CommonConstants.LOG_TAG, 'Failed to operation stopBackgroundRunning. %{public}s', JSON.stringify(err));
  });
}

更多关于HarmonyOS 鸿蒙Next中uniapp内使用webview引入HTML页面进行语音通话,需要保证息屏或者后台情况下,语音通话不被打断的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


需要用到原生的UTS

HarmonyOS的开发者模式提供了很多实用的工具,方便我们进行调试和优化。

有具体的文档嘛,

内容转换指南

概述

本文档提供将HTML内容转换为Markdown格式的基本指导原则。

转换规则

  • 移除复制功能和深色代码主题
  • 不显示"基本信息"相关内容
  • 图片转换需符合特定条件
  • 仅输出转换后的Markdown内容

注意事项

  • 空图片地址不进行转换
  • 无图片时不添加图片内容
  • 不包含示例图片链接
  • 不提供额外解释或建议

处理流程

  1. 解析HTML结构
  2. 应用转换规则
  3. 生成纯净的Markdown文档

编写UTS插件

在HarmonyOS Next中,使用UniApp的WebView实现后台持续语音通话,需申请ohos.permission.KEEP_BACKGROUND_RUNNING权限并配置ContinuousTask模式。通过后台任务管理机制保持进程活跃,结合AVSession音频焦点管理避免系统中断。需在config.json中声明后台持续运行能力,并设置properlyRelease为false维持WebView活动状态。系统会通过后台任务生命周期管理确保通话进程在息屏时持续运行,但需注意功耗优化策略可能限制超时任务。

在HarmonyOS Next中,要实现uniapp内webview语音通话在息屏或后台持续运行,确实需要利用持续任务能力。由于uniapp本身无法直接调用HarmonyOS的持续任务API,必须通过uts插件来桥接调用。

具体实现步骤:

  1. 创建uts插件,在native侧实现持续任务申请逻辑
  2. 在插件中调用HarmonyOS的backgroundTaskManager相关API
  3. 配置必要的后台权限和任务类型声明
  4. 在uniapp中通过uts插件触发持续任务管理

关键点:需要申请ohos.permission.KEEP_BACKGROUND_RUNNING权限,并在配置文件中声明backgroundModesaudioPlayback。这样即使在webview场景下,音频通话也能在后台持续运行不被中断。

建议在语音通话开始时申请持续任务,通话结束时及时释放,以优化系统资源使用。

回到顶部