检查警报管理器是否正在运行(无法正常工作)

时间:2018-06-06 08:38:02

标签: android alarmmanager

首先,我确实阅读了与此类似的其他问题,看起来最有帮助的是one,并尝试使用前两个答案来解决我的问题,我在主要活动中有两个警报管理器,如图所示这里

private static final int NOTIFICATION_REMINDER_PROMPT = 0;
private static final int NOTIFICATION_REMINDER_UPDATE = 1;

if(!alarmIsRunning(this, new Intent(this, PromptReceiver.class))) {

    Intent notifyIntent = new Intent(this, PromptReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast
            (this, NOTIFICATION_REMINDER_PROMPT, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
            1000 * 60 * 60, pendingIntent);

}

if(!alarmIsRunning(this, new Intent(this, UpdateReceiver.class))) {
    Intent notifyIntent2 = new Intent(this, UpdateReceiver.class);
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast
            (this, NOTIFICATION_REMINDER_UPDATE, notifyIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager2 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
            1000 * 60 * 60 * 50, pendingIntent2);
}

if函数中使用的函数代码如下

public static boolean alarmIsRunning(Context context, Intent intent){
    return PendingIntent.getBroadcast(context, 0,
            intent, PendingIntent.FLAG_NO_CREATE) != null;
}

现在我的问题是,当我调试时,第一个if条件总是给出true,第二个总是给出false并在里面运行代码,但是当我选择使用adb shell dumpsys alarm行的第二种方式时在我的终端,只有第二个正在工作。有些东西似乎是我不明白的。

1 个答案:

答案 0 :(得分:1)

当您获取待处理的意图以查看它是否存在时,您需要完全像以前一样重新创建它。因此,您需要将原始请求代码传递给alarmIsRunning()方法。

以下是我用作参考的方法之一的摘录:

private fun doesPendingIntentExist(requestCode: Int, intent: Intent): Boolean {
    val tempPendingIntent = PendingIntent.getBroadcast(context,
            requestCode, intent,
            PendingIntent.FLAG_NO_CREATE)
    tempPendingIntent?.cancel()
    return tempPendingIntent != null
}

TL; DR:您需要将原始请求代码传递给PendingIntent.getBroadcast()方法。