【HarmonyOS NEXT】实现启动广告页

【需求】

打开时 APP,加载后台配置广告,若干秒后自动关闭广告页,并显示首页

【解决思路】

  1. 在 EntryAbility 中,创建应用子窗口,加载广告页。
  2. 在广告页中,开启定时器,倒数完成后关闭子窗口。子窗口关闭后,会显示 app 首页。

【代码】

  1. 在 EntryAbility,onWindowStageCreate 回调中,创建子窗口
export default class EntryAbility extends UIAbility {
  async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {
    // ...
    await showStartAd(windowStage, this.context)
    // ...
  }
}

/**
 * 打开启动广告
 * @param windowStage
 * @param ctx
 */
async function showStartAd(windowStage: window.WindowStage, ctx: Context) {
  const adStore = new AdStore(ctx)
  const ad = await getStartAd() // 获取广告数据
  await adStore.setStartAd(ad) // 写入首选项
  const win = await windowStage.createSubWindow(OPEN_SUB_WINDOW_KEY) // 创建子窗口
  await win.showWindow()
  win.setUIContent('pages/OtherDemo/StartAd')
}
  1. 编写子窗口页面
@Entry
@Component
struct StartAd {
  @State adObj: AdvertModel = {
    showAd: false,
    adTime: 0
  }
  adStore: AdStore = new AdStore(getContext())
  timer: number = -1

  async aboutToAppear() {
    this.getStartAd()
  }

  aboutToDisappear(): void {
    clearInterval(this.timer)
  }

  closeWin() {
    const win = window.findWindow(OPEN_SUB_WINDOW_KEY) // 找到子窗口
    win.destroyWindow() // 销毁窗口
  }

  async getStartAd() {
    this.adObj = await this.adStore.getStartAd()
    this.timer = setInterval(() => {
      if (this.adObj.adTime === 0) {
        clearInterval(this.timer)
        this.closeWin()
        return
      }
      this.adObj.adTime--
    }, 1000)
  }

  build() {
    Stack({ alignContent: Alignment.TopEnd }) {
      Image(this.adObj.adImg).objectFit(ImageFit.Cover)
      Text(`${this.adObj.adTime}秒后跳过`)
        .padding({ left: 10, right: 10 })
        .margin({ right: 20, top: 50 })
        .height(30)
        .fontSize(14)
        .borderRadius(15)
        .backgroundColor('#66F4F4F4')
        .textAlign(TextAlign.Center)
        .onClick(() => {
          this.closeWin()
        })
    }.height('100%').width('100%')
  }
}

【效果图】

启动页 5秒后跳转=> 首页
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值