【问题标题】:AlarmManager fires alarm immediately (while it shouldn't)AlarmManager 立即发出警报(虽然它不应该)
【发布时间】:2013-10-04 19:24:23
【问题描述】:

我有一个scheduleAlarm 类,它应该在特定时间设置警报,但是在调用该方法后立即触发警报。我检查过以毫秒为单位提供的时间没问题,所以我不知道发生了什么。

private void scheduleAlarm(int day, int startHour, int startMinute, String info) {

    AlarmManager mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Calendar c = Calendar.getInstance();

    c.set(Calendar.DAY_OF_WEEK, day);
    c.set(Calendar.HOUR, startHour);
    c.set(Calendar.MINUTE, startMinute);

    Intent startIntent = new Intent(this, Recorder.class);
    startIntent.putExtra("info", "someinfo");

    Log.v("millis", String.valueOf(c.getTimeInMillis())); // time is okay
    Random mRandom = new Random();
    int randomInt = mRandom.nextInt();

    PendingIntent pendingIntent = PendingIntent.getService(this, randomInt, startIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
}

【问题讨论】:

  • 好吧,如果day 在今天之前,或者hour 在现在之前等等,你会得到这个行为。

标签: android alarmmanager


【解决方案1】:

只需确保为闹钟设置的时间在当前时间之后。

有一个简单的方法可以检查。

只是做

Calendar.getInstance().getTimeInMilis() - c.getTimeInMillis()

记录此结果,您可以查看第二个是否在第一个之前。 假设现在是 4 点钟,而您设置了同一天和 3 点钟。它会立即被激活。

除此之外,我看不出它为什么会失败。

另一种测试方法是使用 currentTime 并添加让我们说 10k 毫秒,看看它是否在测试后 10 秒内激活。那么您确定您的情况设置的时间是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多