首先,我确实阅读了与此类似的其他问题,看起来最有帮助的是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
行的第二种方式时在我的终端,只有第二个正在工作。有些东西似乎是我不明白的。
答案 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()
方法。