进入后台,Toast提示用户 HarmonyOS 鸿蒙Next

进入后台,Toast提示用户 HarmonyOS 鸿蒙Next 【设备信息】 Mate60
【API版本】 Api12
【DevEco Studio版本】 5.0.3.910
【问题描述】 app进入后台,弹toast提示用户进入后台,toast不显示,日志有提示:C03903/…AceSubWindow [(-1:100000:singleton)] init toast dialog window failed

promptAction.showToast({
 message: 'app已进入后台运行',
 duration: 2000,
 showMode: promptAction.ToastShowMode.TOP_MOST
})

更多关于进入后台,Toast提示用户 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

目前只能在app内部弹出toast,属于设计规格,为安全考虑,应用退出后台之后是不允许toast在桌面弹出的。可以使用横幅通知,看下面demo能否满足要求,app后台时,会弹出横幅通知提醒用户:

export default class EntryAbility extends UIAbility {
    // 通知方法
    publishNotification(){
        let notificationRequest: notificationManager.NotificationRequest = { // 描述通知的请求
            id: 1, // 通知ID
            content: { // 通知内容
                notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
                normal: { // 基本类型通知内容
                    title: '应用名称',
                    text: '应用在后台运行'
                },
            },
            notificationSlotType: notificationManager.SlotType.SOCIAL_COMMUNICATION,
        }
        notificationManager.publish(notificationRequest).then(() => { // 发布通知
            console.info('publish success');
        }).catch((err: Error) => {
            console.error(`publish failed,message is ${err}`);
        });
    }

    onBackground(): void {
        console.log("11111")
        // 通知
        this.publishNotification()
        // Ability has back to background
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
    }
}

更多关于进入后台,Toast提示用户 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,要在应用进入后台时显示Toast提示,可以使用AbilityLifecycleCallback来监听应用生命周期变化。具体步骤如下:

  1. 实现AbilityLifecycleCallback接口,并重写onAbilityBackground方法,该方法在应用进入后台时触发。
  2. onAbilityBackground方法中,使用ToastDialog显示提示信息。
  3. 注册AbilityLifecycleCallback监听器。

示例代码如下:

import Ability from '@ohos.application.Ability';
import AbilityLifecycleCallback from '@ohos.application.AbilityLifecycleCallback';
import { ToastDialog } from '@ohos.commonUI';

class MyLifecycleCallback extends AbilityLifecycleCallback {
    onAbilityBackground(ability: Ability): void {
        // 显示Toast提示
        ToastDialog.show({ message: '应用已进入后台' });
    }
}

// 注册生命周期回调
let lifecycleCallback = new MyLifecycleCallback();
globalThis.abilityContext.registerAbilityLifecycleCallback(lifecycleCallback);

这段代码会在应用进入后台时显示一个Toast提示,告知用户应用已进入后台。

回到顶部