某人 发表于 2025-4-1 08:38:20

OpenHarmony 4.0 Release 应用自启动

OpenHarmony 4.0 Release 应用自启动

需求场景:部分场景,三方应用、定制应用或系统应用需要在开机时就自启动指定应用,比如某些货物售卖机、售票窗口、检票口、打卡机等。

提供方案:

方案一:因开机动画及锁屏功能正常时,都是先显示桌面(launcher),故提供在launcher 创建窗口时,将某指定应用(非服务类型)拉起。
代码解析:

laucnher的窗口创建在工具类WindowManager.ts中,我们可以将拉起操作放到createWindow或createRecentWindow中,以下是将拉起动作放到createRecentWindow中的示例:1.为实现产品定制控制我们新增了DeviceUtil.isXxxProduct()来管控某个特定的产品,2.为配合某xxx应用是否开机被拉起,特此新增persist.autostart.xxx属性来配合管控。3.为配合网络场景,此外还添加了监听网络状态,以达到网络连接成功时再拉起指定应用。
    if (DeviceUtil.isXxxProduct()) {      Log.showInfo(TAG, 'OneFan isXxxProduct');      // 先使用register接口注册订阅事件      this.netCon.register((error: BusinessError) => {      console.log("OneFan" + JSON.stringify(error));      });      // 订阅网络可用事件。调用register后,才能接收到此事件通知      this.netCon.on('netAvailable', (data: connection.NetHandle) => {      console.info("OneFan Succeeded to get data: " + JSON.stringify(data));      if (systemparameter.getSync('persist.autostart.xxx', '0') === '1') {          setTimeout(() => {            let want = {            "deviceId": "",            "bundleName": "com.xx.xxx",            "abilityName": "EntryAbility"            };            globalThis.desktopContext.startAbility(want).then(() => {            Log.showInfo(TAG, 'OneFan startAbility success');            // 使用unregister接口取消订阅            this.netCon.unregister((error: BusinessError) => {                console.log("OneFan" + JSON.stringify(error));            });            }).catch((error) => {            Log.showInfo(TAG, 'OneFan startAbility failed');            })          }, 500)      } else {          Log.showInfo(TAG, 'OneFan persist.autostart.xxx err');      }      });    }
默认情况下,我们不会配置persist.autostart.xxx属性,故开启不会自启动某个指定应用,只有在persist.autostart.xxx 为 1时且网络OK时才会启动某应用。
在4.1R及之后的版本实现开机自启动则建议直接使用AutoStartupCallback.onAutoStartupOn接口即可。可参考https://docs.openharmony.cn/pages/v4.1/zh-cn/application-dev/reference/apis-ability-kit/js-apis-inner-application-autoStartupCallback-sys.md
而相对于服务的自启动配置来说,就相对比较容易了,预安装配置到install_list.json,自启动配置(应用特权配置) 到install_list_capability.json,具体可参考docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-app-privilege-config-guide.md/

yndj- 发表于 2025-4-1 08:38:45

请问以下,你有验证过AutoStartupCallback.onAutoStartupOn 这个API?我试过了。会提示16000050 内部错误 ; 我也设置了system_core, 也在install_list 里面加了签名跟包名。网上找了一圈,都 没人用过这个自带的api。文档也没其他描述,也没说什么签名,要不要南向修改源码。
页: [1]
查看完整版本: OpenHarmony 4.0 Release 应用自启动