即将发出的警报立即触发



我已经使用AlarmManager设置了警报并通过了TimePicker的时间。

我想在给定时间设置警报,但是如果通过时间(我要设置的时间(,则警报触发器立即

示例: - 如果当前时间是9:00 pm,我将警报设置为7:00 pm,则立即触发警报。

以下是我的代码

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);
}

由于我不确定您如何允许用户设置时间,我不确定是否添加一天会始终可以解决问题。例如,如果允许用户从日历中选择一个日期,则可能是过去几年。您将需要根据所需的重复间隔以及如何允许用户设置时间来调整添加的时间。

相关内容

  • 没有找到相关文章

最新更新