下面是一个非常简单的方法,它会触发一个Date和一个id来触发警报,从而开始倒计时。出于某种原因,我不明白,如果我用一个日期和id 0调用一次并再次使用另一个日期和id 1(即两个不同的倒计时)再次调用它,Android将同时触发两个警报(特别是id为0的第一个日期,所以两个倒计时同时开始。
谁能告诉我为什么以及如何解决这个问题?谢谢!
public void setCountdownAlarm(Date fireTime, int id)
{
// startCountdown will be called at fireTime
BroadcastReceiver startCountdown = new BroadcastReceiver() {
@Override public void onReceive( Context context, Intent theIntent )
{
countdownTimer = new Timer();
countdownTimer.schedule(new TimerTask() {
@Override
public void run() {
onSecondTick(showtime);
}
}, 0, 100); // call every 10th of a second
}
};
this.registerReceiver( startCountdown, new IntentFilter("com.counter.app.CountActivity.COUNT") );
Intent intent = new Intent("com.counter.app.CountActivity.COUNT");
PendingIntent pintent = PendingIntent.getBroadcast( this, id, intent, 0 );
AlarmManager manager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
if (Build.VERSION.SDK_INT >= 19)
manager.setExact(AlarmManager.RTC_WAKEUP, fireTime.getTime(), pintent);
else
manager.set(AlarmManager.RTC_WAKEUP, fireTime.getTime(), pintent);
}
编辑说当我等待第二个警报触发时,Android实际上两次调用startCountdown - 再次为每个警报调用。救命啊!
答案 0 :(得分:1)
我弄清楚我做错了什么。如在类似问题的答案中所解释的,如果您想获得唯一的待定意图,则PendingIntent.getBroadcast(requestCode)的第二个参数必须是唯一的。我通过传递" id"来处理这个问题。
第二个问题是我每次调用setCountdownAlarm时都注册了BroadcastReceiver。 BroadcastReceiver只应注册一次,通常在活动的onCreate方法中注册。