【问题标题】:Upcoming alarm triggers immediately即将到来的警报立即触发
【发布时间】:2017-05-01 15:38:55
【问题描述】:

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

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

示例:- 如果当前时间是晚上 9:00,我将闹钟设置为晚上 7:00,那么闹钟会立即触发。

下面是我的代码

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

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

【问题讨论】:

    标签: android service alarmmanager repeatingalarm


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多