Android-应用程序处于后台时显示通知

Android-应用程序处于后台时显示通知,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我正在使用AlarmManager定期检查某个端点上的新内容,验证来自该端点的结果是否与我在应用程序上已有的结果相同,如果不相同,则为每个项目创建通知 我需要知道的是,我应该如何使警报仅在应用程序暂停或停止时启动,并在反应用程序启动或恢复时取消警报 我应该在哪里启动警报,在哪里取消警报 在安卓通知指南中,它在第章:何时不显示通知中指出: 如果相关新信息当前在屏幕上,则不要创建通知。相反,使用应用程序本身的UI直接在上下文中通知用户新信息。例如,当用户正在与另一个用户聊天时,聊天应用程序不应创建系

我正在使用AlarmManager定期检查某个端点上的新内容,验证来自该端点的结果是否与我在应用程序上已有的结果相同,如果不相同,则为每个项目创建通知

我需要知道的是,我应该如何使警报仅在应用程序暂停或停止时启动,并在反应用程序启动或恢复时取消警报

我应该在哪里启动警报,在哪里取消警报

在安卓通知指南中,它在第章:何时不显示通知中指出:

如果相关新信息当前在屏幕上,则不要创建通知。相反,使用应用程序本身的UI直接在上下文中通知用户新信息。例如,当用户正在与另一个用户聊天时,聊天应用程序不应创建系统通知


如果我打开了应用程序,我只想禁用警报,当应用程序关闭/暂停时,我想取消所有操作。

您可以尝试使用服务并覆盖其中的非即时方法,并在级别等于TRIM_MEMORY_UI_HIDDEN时显示通知

@Override
public void onTrimMemory(int level) {
    super.onTrimMemory(level);
    switch (level) {
        case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:

            break;
    }

} 
查看文档了解更多信息

您可以尝试使用服务并在其中重写,即使用非即时方法,并在级别等于修剪内存时显示通知

@Override
public void onTrimMemory(int level) {
    super.onTrimMemory(level);
    switch (level) {
        case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:

            break;
    }

} 
查看文档了解更多信息

您需要创建一个具有全局状态的自定义应用程序,并在应用程序级别实现自己的onPause和onResume

创建自己的应用程序子类,如下所示:

public class MyApplication extends Application {

    private static MyApplication sInstance;

    public MyApplication getInstance(){
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }

    public void onStart() {
        // TODO: Stop your notification.
    }

    public void onStop() {
        // TODO: Start your notification.
    }

}
在AndroidManifest.xml的标记中指定其名称:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:name="MyApplication">
然后创建一个基本活动,或者在每个活动中都这样做,只需调用activityStarted和activityStopped方法:

有关自定义应用程序的更多详细信息,请参阅

有关Android应用程序级别暂停和恢复的更多详细信息,请参阅

希望这有帮助。

您需要创建一个具有全局状态的自定义应用程序,并在应用程序级别实现自己的onPause和onResume

创建自己的应用程序子类,如下所示:

public class MyApplication extends Application {

    private static MyApplication sInstance;

    public MyApplication getInstance(){
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
    }

    public void onStart() {
        // TODO: Stop your notification.
    }

    public void onStop() {
        // TODO: Start your notification.
    }

}
在AndroidManifest.xml的标记中指定其名称:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:name="MyApplication">
然后创建一个基本活动,或者在每个活动中都这样做,只需调用activityStarted和activityStopped方法:

有关自定义应用程序的更多详细信息,请参阅

有关Android应用程序级别暂停和恢复的更多详细信息,请参阅


希望这能有所帮助。

我不确定这在您的项目中是否可行,或者它是否能实现您希望的目标,但是您可以从一个基本活动扩展所有活动。在该基本活动的onPause/onStop/onDestroy方法中,启动报警,在该基本活动的onCreate/onStart方法中,取消具有挂起意图的报警

这将为您提供一个设置位置,如果您有多个活动可以关闭应用程序,您可以从该位置处理警报


您可以了解有关活动生命周期的更多信息。

我不确定这在您的项目中是否可行,或者它是否能实现您希望的目标,但是您可以从一个基本活动扩展所有活动。在该基本活动的onPause/onStop/onDestroy方法中,启动报警,在该基本活动的onCreate/onStart方法中,取消具有挂起意图的报警

这将为您提供一个设置位置,如果您有多个活动可以关闭应用程序,您可以从该位置处理警报


您可以了解更多有关活动生命周期的信息。

您能再解释一点,我是如何使用OnTimmery的吗?我确实阅读了文档,但不清楚。当您的应用程序UI进入后台时,如果已注册,将收到TRIM_MEMORY_UI_HIDDEN ComponentCallback。您能再解释一下OnTimmery是如何为我工作的吗?我确实阅读了文档,但不清楚。当应用程序UI进入后台时,如果已注册,则会收到TRIM_MEMORY_UI_HIDDEN ComponentCallback。感谢您的代码示例,我知道您的目的是什么,但在这种情况下,每当任何活动停止时,我都会启动警报。我不想在每个活动结束时启动警报,而是在应用程序本身暂停或停止时启动警报。我一定是解释错了什么。。。每次启动活动时,ActiveActivitiesTracker类都会向计数器sActiveActivities添加一个。如果由于某种原因,您的活动调用了top上的方法,并且其sActiveActivities计数器为零,则表示其所有活动都已停止。此时,它将通过委托调用应用程序顶部的方法:MyApplication.getInstance.onStop;。这样,您将在应用程序级别而不是活动级别拥有一个onStop方法。因此,您可以在应用程序停止时使用它来创建警报。谢谢您
你的代码示例,我知道你要做什么,但在这种情况下,我会在每次活动停止时启动警报。我不想在每个活动结束时启动警报,而是在应用程序本身暂停或停止时启动警报。我一定是解释错了什么。。。每次启动活动时,ActiveActivitiesTracker类都会向计数器sActiveActivities添加一个。如果由于某种原因,您的活动调用了top上的方法,并且其sActiveActivities计数器为零,则表示其所有活动都已停止。此时,它将通过委托调用应用程序顶部的方法:MyApplication.getInstance.onStop;。这样,您将在应用程序级别而不是活动级别拥有一个onStop方法。因此,您可以在应用程序停止时使用它来创建警报。