我想在特定日期设置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中,但是吐司根本没有被触发。
答案 0 :(得分:0)
使用RTC_WAKEUP
设置闹钟时,需要确切的时间才能让闹钟响起,而不是从现在起的时间。
所以你不必减去当前时间:
alarms.set(AlarmManager.RTC_WAKEUP, timeToSetTheAlarm, operation);
另请注意,如果您需要准确的闹钟时间,请从目标API 19使用setExact
,否则会优化闹钟时间以减少唤醒时间。
另一个常见的错误是Calendar使用基于0的月份(因此建议使用Calendar.APRIL(3)等常量。