gpt4 book ai didi

java - 为什么 Android 闹钟会同时触发?

转载 作者:行者123 更新时间:2023-11-30 02:44:02 31 4
gpt4 key购买 nike

下面是一个非常简单的方法,它需要一个日期和一个 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 两次——每个闹钟都调用一次。帮助!

最佳答案

我想出了我做错了什么。如类似问题的答案中所述,如果要获得唯一的待定 Intent ,PendingIntent.getBroadcast (requestCode) 的第二个参数必须是唯一的。我通过传递“id”来解决这个问题。

第二个问题是我每次调用 setCountdownAlarm 时都注册了 BroadcastReceiver。 BroadcastReceiver 应该只注册一次,通常是在 Activity 的 onCreate 方法中。

关于java - 为什么 Android 闹钟会同时触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345171/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com