一、功能概述

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:

启用系统的自启动管理支持

开发一个系统应用来管理自启动配置

二、启用系统自启动管理支持

通过ADB Shell实现
连接设备:

hdc shell

检查当前/vendor分区挂载状态:

mount | grep vendor

典型输出示例:

/dev/block/platform/soc/10100000.himci.eMMC/by-name/vendor /vendor ext4 ro,seclabel,relatime 0 0

重新挂载/vendor为可写模式:

mount -o rw,remount /vendor

如果遇到权限问题,需要先获取root权限:

su

创建配置目录:

mkdir -p /vendor/etc/param

创建并编辑配置文件:

echo "const.product.appboot.setting.enabled = 1" > /vendor/etc/param/appboot.para

验证文件内容:

cat /vendor/etc/param/appboot.para

正确应显示:

const.product.appboot.setting.enabled = 1

恢复/vendor分区为只读模式:

mount -o ro,remount /vendor

重启设备:

reboot

三、开发自启动管理应用

1. 开发环境准备

  • 下载并安装 OpenHarmony Full SDK

  • 配置开发环境(DevEco Studio)

  • 确保有系统应用开发权限

2. 应用配置(两个位置都必须配置)

1、 config.json 配置

  • 需要声明系统应用权限:
{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.MANGE_APP_BOOT",
        "reason": "用于管理应用自启动",
        "usedScene": {
          "ability": [
            "MainAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

2、 签名配置
使用提供的 profile 模板 UnsgnedReleasedProfileTemplate.json,关键字段说明:

  • “apl”: “system_core” - 声明为系统核心应用
  • “app-feature”: “hos_system_app” - 系统应用特征
  • “allowed-acls” - 包含 ohos.permission.MANAGE_APP_BOOT 权限

四、代码实现

官网参考
权限:ohos.permission.MANAGE_APP_BOOT

  • 设置自启动
import autoStartupManager from '@ohos.app.ability.autoStartupManager';

//设置自启动
try {
              autoStartupManager.setApplicationAutoStartup({
                bundleName: 'com.example.application',
                abilityName: 'EntryAbility'
              }).then((data: void) => {
                this.queryAutoBoot()
                this.zq= JSON.stringify(data)
                console.info('====> setApplicationAutoStartup data: ' + JSON.stringify(data));
              }).catch((err: BusinessError) => {
                this.zq= JSON.stringify(err)
                console.info('====> setApplicationAutoStartup err: ' + JSON.stringify(err));
              });
            } catch (err) {
              this.zq=JSON.stringify(err)
              console.info('====> setApplicationAutoStartup throw err: ' + JSON.stringify(err));
            }
  • 显示自启动列表
  @State appList: common.AutoStartupInfo[] = []
List() {
          ForEach(this.appList, (item: common.AutoStartupInfo, index: number) => {
            ListItem() {
              Row() {
                Text(`${index+1}`).margin(10)
                Text(`${item.bundleName}/${item.abilityName}`).margin(10)
                Button('取消自启动')
                  .onClick((event: ClickEvent) => {
                    this.cancelAutoBoot(this.appList[index])
                  })
              }
              .width('100%')
              .height('100%')
            }
            .height(40)
          })
        }
        .height('50%')
  • 取消自启动
  async cancelAutoBoot(info: common.AutoStartupInfo) {
    try {
      AutoStartupManager.cancelApplicationAutoStartup({
        bundleName: info.bundleName,
        abilityName: info.abilityName
      }).then(() => {
        console.info('====> cancelApplicationAutoStartup');
        promptAction.showToast({
          message: `取消自动启动成功`
        })
        this.queryAutoBoot()
      }).catch((err: BusinessError) => {
        console.info('====> cancelApplicationAutoStartup err: ' + JSON.stringify(err));
        promptAction.showToast({
          message: `取消自动启动异常:${JSON.stringify(err)}`
        })
      });
    } catch (err) {
      console.info('====> cancelApplicationAutoStartup throw err: ' + JSON.stringify(err));
      promptAction.showToast({
        message: `取消自动启动异常:${JSON.stringify(err)}`
      })
    }
  }
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐