即将到来的警报立即触发

Upcoming alarm triggers immediately

我已经使用AlarmManager设置了闹钟,并通过timePicker传递了时间。

我想在给定时间设置闹钟,但如果(我要设置的)时间已经过去,那么闹钟会立即触发。

示例:- 如果当前时间是 9:00 下午,并且我为 7:00PM 设置了闹钟,那么闹钟会立即触发。

下面是我的代码

public void startAlarm(Calendar c, int id){
    Toast.makeText(this, "Alarm in on", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(this,AlarmReciever.class);
    intent.putExtra("id",id);

    //int _id = (int)System.currentTimeMillis();

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,id,intent,PendingIntent.FLAG_ONE_SHOT);
    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), 1000*60,pendingIntent);
    //alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
}

如果超过我们设置的闹钟时间,如何控制闹钟的触发?

您将需要检测日历时间是否在过去并相应地进行调整。像这样:

public void startAlarm(Calendar c, int id){
    Toast.makeText(this, "Alarm in on", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(this,AlarmReciever.class);
    intent.putExtra("id",id);

    //Check if calendar is set in the past
    if (c.getTimeInMillis() < System.currentTimeMillis()) {
        //Add one day to the calendar (or whatever repeat interval you would like)
        c.add(Calendar.DAY_OF_YEAR, 1);
    }

    //int _id = (int)System.currentTimeMillis();

    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,id,intent,PendingIntent.FLAG_ONE_SHOT);
    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), 1000*60,pendingIntent);
    //alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
}

因为我不确定您是如何允许用户设置时间的,所以我不确定增加一天是否总能奏效。例如,如果您允许用户从日历中选择一个日期,则该日期可能是过去几年。您需要根据所需的重复间隔以及允许用户设置时间的方式来调整添加的时间。