文档管理中心
我的
|

网络与连接

纯血的鸿蒙手表应用能否在后台持续保持蓝牙连接

已解决
【问题描述】:我们准备开发一个ecg手表应用,通过手表的蓝牙功能与外部的单导动态心电记录仪(物理设备)连接后在后台持续保持连接以获取心电等相关的设备数据并实时渲染出来。采样率为125hz每秒。在这种情况下用原生纯血鸿蒙开发华为手表是否能在后台持续保持蓝牙连接,有点担心一直采样的性能功耗

【问题现象】:不确定鸿蒙是否能在后台持续保持蓝牙连接

【版本信息】:不涉及

【复现代码】:不涉及

【尝试解决方案】:不涉及

点赞
收藏
回复
1
分享
举报
浏览285 发布于2026-02-28 09:46江苏
全部评论
最多点赞
最新发布
最早发布
|
采纳答复

应用退至后台后,在后台需要长时间运行用户可感知的任务,如蓝牙相关业务等。为防止应用进程被挂起,导致对应功能异常,可以申请长时任务,使应用在后台长时间运行。

可参考以下:

  1. 添加后台运行权限ohos.permission.KEEP_BACKGROUND_RUNNING。
收起
自动换行
深色代码主题
复制
"requestPermissions": [
   {
     "name": "ohos.permission.KEEP_BACKGROUND_RUNNING"
   }
]

 2. 声明蓝牙传输后台模式类型。在module.json5文件中为需要使用长时任务的UIAbility声明相应的长时任务类型,配置文件中填写长时任务类型的配置项。

收起
自动换行
深色代码主题
复制
"module": {
   "abilities": [
       {
           "backgroundModes": [
            // 配置长时任务类型为蓝牙传输
           "bluetoothInteraction"
           ]
       }
   ],
   // ...
}

3. 导入长时任务相关模块。

收起
自动换行
深色代码主题
复制
import { backgroundTaskManager } from '@kit.BackgroundTasksKit';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { wantAgent, WantAgent } from '@kit.AbilityKit';
import { ble } from '@kit.ConnectivityKit';

4. 申请和取消长时任务。

收起
自动换行
深色代码主题
复制
import { bundleManager, wantAgent } from '@kit.AbilityKit'
import { ble } from '@kit.ConnectivityKit'
import { backgroundTaskManager } from '@kit.BackgroundTasksKit'

class BackgroundRunningManager {
  // 申请长时任务
  async startBackgroundRunning() {
    // 获取bundle应用信息
    const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
    // 通过wantAgent模块下getWantAgent方法获取WantAgent对象
    const wantAgentObj = await wantAgent.getWantAgent({
      // 添加需要被拉起应用的bundleName和abilityName
      wants: [{ bundleName: bundleInfo.name, abilityName: "EntryAbility" }],
      // 使用者自定义的一个私有值
      requestCode: 0,
      actionFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG],
      // 车钥匙长时任务子类型。只有申请bluetoothInteraction类型的长时任务,车钥匙子类型才能生效。
      // 确保extraInfo参数中的Key值为backgroundTaskManager.BackgroundModeType.SUB_MODE,否则子类型不生效。
      extraInfo: { [backgroundTaskManager.BackgroundModeType.SUB_MODE] : backgroundTaskManager.BackgroundSubMode.CAR_KEY }
    })
    // 创建类型为BLUETOOTH_INTERACTION的后台任务
    await backgroundTaskManager.startBackgroundRunning(context,backgroundTaskManager.BackgroundMode.BLUETOOTH_INTERACTION, wantAgentObj)
  }

  // 停止后台任务
  async stopBackgroundRunning() {
    backgroundTaskManager.stopBackgroundRunning(getContext())
  }
}

5. 

调用方式。

  • 在startBackgroundRunning回调中执行。
    收起
    自动换行
    深色代码主题
    复制
    backgroundTaskManager.startBackgroundRunning(this.context, backgroundTaskManager.BackgroundMode.BLUETOOTH_INTERACTION, wantAgentObj).then((res: backgroundTaskManager.ContinuousTaskNotification) => {
      console.info("Operation startBackgroundRunning succeeded")
      // 此处执行具体的蓝牙业务逻辑。
    }).catch((error: BusinessError) => {
      console.error(`Failed to Operation startBackgroundRunning. code is ${error.code} message is ${error.message}`)
    });
    
  • 在执行蓝牙业务逻辑之前执行startBackgroundRunning。
    收起
    自动换行
    深色代码主题
    复制
    // 执行封装好的长时任务方法
    this.startContinuousTask()
    // 执行蓝牙相关业务逻辑
    ble.startBLEScan()
    

 开启蓝牙后台长时任务时,若蓝牙连接断开需在一分钟内重新连接成功,否则长时任务将自动结束

【背景知识】

  • BLUETOOTH_INTERACTION:应用退至后台后,在后台需要长时间运行用户可感知的任务。为防止应用进程被挂起,导致对应功能异常,可以申请长时任务,使应用在后台长时间运行。
展开全部
1楼回复于2026-03-12 06:11 来自广东
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要提问题

了解社区公约,与您携手共创和谐专业的开发者社区。