即将发出警报

时间:2017-05-01 15:38:55

标签: android service alarmmanager repeatingalarm

我已使用AlarmManager设置闹钟并从timePicker传递时间。

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

示例: - 如果当前时间是晚上9:00,我在晚上7:00设置闹钟,则会立即触发警报。

以下是我的代码

var sb = new StringBuilder();

using (var sha1 = SHA1.Create())
{
    byte[] byteHash = sha1.ComputeHash(Encoding.UTF8.GetBytes(HashData));

    foreach (byte bh in byteHash)
    {
        sb.Append(String.Format("{0:X2}", bh));
    }
}

string result = sb.ToString();

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

1 个答案:

答案 0 :(得分: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);
}

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