在特定日期设置AlarmManager

时间:2014-05-24 21:46:49

标签: android alarmmanager

我想在特定日期设置Toast。 我试着使用这段代码:

private void setAlertOnSpesificDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(info.eventYear, info.eventMonth, info.eventDayOfMonth,
                info.eventHour, info.eventMinute, 0);
        long timeToSetTheAlarm = calendar.getTimeInMillis();
        AlarmManager alarms = (AlarmManager) this
                .getSystemService(Context.ALARM_SERVICE);

        Receiver receiver = new Receiver();
        IntentFilter filter = new IntentFilter("ALARM_ACTION");
        registerReceiver(receiver, filter);

        Intent intent = new Intent("ALARM_ACTION");
        intent.putExtra("param", "My scheduled action");
        PendingIntent operation = PendingIntent
                .getBroadcast(this, 0, intent, 0);
        long t = timeToSetTheAlarm - System.currentTimeMillis();
        alarms.set(AlarmManager.RTC_WAKEUP, t, operation);
    }

和接收者定义如下:

public class Receiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Toast.makeText(context, intent.getStringExtra("param"),
                    Toast.LENGTH_SHORT).show();
        }

    }

问题是onReceive方法中的Toast是立即触发的,而不是我设置的日期。 有什么想法吗?

先谢谢了! :)

P.S。 - 我试图将alarm.set()“timeToSetTheAlarm”放入t中,但是吐司根本没有被触发。

1 个答案:

答案 0 :(得分:0)

使用RTC_WAKEUP设置闹钟时,需要确切的时间才能让闹钟响起,而不是从现在起的时间。 所以你不必减去当前时间:

alarms.set(AlarmManager.RTC_WAKEUP, timeToSetTheAlarm, operation);

另请注意,如果您需要准确的闹钟时间,请从目标API 19使用setExact,否则会优化闹钟时间以减少唤醒时间。

另一个常见的错误是Calendar使用基于0的月份(因此建议使用Calendar.APRIL(3)等常量。