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/

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐