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

时间:2015-08-18 15:04:49

标签: android notifications alarmmanager

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

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

我应该在哪里开始闹钟以及我应该在哪里取消闹钟?

在Android通知指南中,它说(在章节: 何时不显示通知 ):

  

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

如果我打开了应用程序,我只想禁用闹钟,当应用程序关闭/暂停时,我想取消所有内容。

3 个答案:

答案 0 :(得分:3)

您可以尝试使用服务并覆盖其中的onTrimMemory方法,并在" level"时显示通知。等于TRIM_MEMORY_UI_HIDDEN

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

            break;
    }

} 

查看文档以获取更多信息 http://developer.android.com/reference/android/content/ComponentCallbacks2.html#TRIM_MEMORY_UI_HIDDEN

答案 1 :(得分:3)

您需要创建一个具有全局状态的Custom Application,并在应用级别实施您自己的onPauseonResume

像这样创建自己的Application子类:

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">

创建一个类来保存活动计数:

public class ActiveActivitiesTracker {

    private static int sActiveActivities = 0;

    public static void activityStarted()
    {
        if (sActiveActivities == 0) {
            // TODO: Here is presumably "application level" resume
            MyApplication.getInstance().onStart();
        }
        sActiveActivities++;
    }

    public static void activityStopped()
    {
        sActiveActivities--;
        if (sActiveActivities == 0) {
            // TODO: Here is presumably "application level" pause
            MyApplication.getInstance().onStop();
        }
    }
}

然后创建基本活动(或在每项活动中执行此操作),只需调用activityStarted()activityStopped()方法:

@Override
public void onStart() {
    super.onStart();
    ActiveActivitiesTracker.activityStarted();
}

@Override
public void onStop() {
    super.onStop();
    ActiveActivitiesTracker.activityStopped();
}

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

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

希望这有帮助。

答案 2 :(得分:0)

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

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

您可以详细了解活动的生命周期here