HarmonyOS 鸿蒙Next系统启动后自动运行常驻后台服务实现方式

HarmonyOS 鸿蒙Next系统启动后自动运行常驻后台服务实现方式是怎么的?

3 回复

1、继承EnterpriseAdminExtensionAbility类,实现一个设备管理应用。

2、将这个设备管理应用部署到终端上,然后激活后,继承EnterpriseAdminExtensionAbility类的实现代码就能常驻后台运行

3、走自动部署流程会自动激活admin,激活admin就会拉起这个进程,只要设备管理应用还是SDA,重启会重新拉起extension进程

更多关于HarmonyOS 鸿蒙Next系统启动后自动运行常驻后台服务实现方式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next系统启动后自动运行常驻后台服务,通常涉及长时任务的申请与管理。以下是实现方式的概述:

  1. 申请长时任务:应用需申请相应的长时任务类型,如数据传输、音视频播放、录音、定位导航等,以确保在后台执行特定任务时不会被系统挂起。
  2. 配置权限与声明:在应用的配置文件中(如module.json5或config.json),需配置长时任务权限(如ohos.permission.KEEP_BACKGROUND_RUNNING),并为需要使用长时任务的组件声明相应的长时任务类型。
  3. 实现与应用:开发者需实现长时任务的管理逻辑,包括任务的申请、启动、停止等,通常通过调用系统提供的后台任务管理接口来完成。

此外,还需注意以下几点:

  • 遵守系统限制:如一个UIAbility(或ServiceAbility)同一时刻仅支持申请一个长时任务。
  • 校验任务执行:系统会对申请的长时任务进行校验,确保应用实际执行的任务与申请的类型相符。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

可以使用长任务实现HarmonyOS 鸿蒙Next系统启动后自动运行常驻后台服务 ,下面是定位的代码,让后台定位 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-backgroundtaskmanager

配置后台长任务权限

"module": {

   "abilities": [

      {

         "backgroundModes": [

         "dataTransfer",

         "location"

         ], // 后台模式类型

      }

   ],

   "requestPermissions": [

      {

         "name": "ohos.permission.KEEP_BACKGROUND_RUNNING"  // 长时任务权限

      },
      {
        "name": "ohos.permission.LOCATION_IN_BACKGROUND",
        "reason": "$string:get_location_description",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }

   ]

}

backgroundTaskManager申请配置后台任务

  // 申请长时任务
  async startBackgroundRunning() {
    const context = getContext()
    // 获取 bundle 应用信息
    const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)

    let wantAgentInfo : wantAgent.WantAgentInfo = {
      wants: [
        {
          bundleName: bundleInfo.name,
          abilityName: "EntryAbility"
        }
      ],
      operationType: wantAgent.OperationType.START_ABILITY,
      requestCode: 0,
      wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
    };

    // 重点: 创建后台定位任务
    wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj : WantAgent) => {
      backgroundTaskManager.startBackgroundRunning(context,
        backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj, (err: BusinessError, data: void)=> {
        if (err) {
          console.error("Operation startBackgroundRunning failed Cause: " + JSON.stringify(err));
        } else {
          console.info("Operation startBackgroundRunning succeeded");
        }
      })
    });

  }

  stopBackgroundRunningTask() {
    const context = getContext()
    backgroundTaskManager.stopBackgroundRunning(context).then(() => {
      console.info(`Succeeded in operationing stopBackgroundRunning.`);
    }).catch((err:BusinessError) => {
      console.error(`Failed to operation stopBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
    });
  }
回到顶部