我使用了一个AlarmManager:
final Intent myIntent = new Intent(this.context, AlarmReceiver.class);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
final Calendar calendar = Calendar.getInstance();
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calendar.set(Calendar.HOUR_OF_DAY, tp1.getCurrentHour());
calendar.set(Calendar.MINUTE, tp1.getCurrentMinute());
myIntent.putExtra("extra", "yes");
myIntent.putExtra("quote id", String.valueOf(quote));
pending_intent = PendingIntent.getBroadcast(Addevent.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending_intent);
}
});
如果将时间设置为接近几小时,但是如果跨度大于9小时,则可以正常工作,当警报创建时,会立即调用AlarmReceiver的onReceive()
方法。我哪里出错了?
答案 0 :(得分:1)
您必须使用与您在调用set
时使用的标志相对应的时间。两个ELAPSED_REALTIME_...
标志对应于自引导以来的时间(elapsedRealTime
)。两个RTC_...
标志对应于自纪元(currentTimeMillis
)以来的时间。
如果您要安排重复均匀,请注意AlarmManager
过去不会安排任务。由于调度需要与不同的进程进行通信,因此有时可能需要超过一毫秒的时间来进行调度。如果您计划在将来少于几毫秒的第一次出现,它可能会消失。
已编辑添加:
最后,不清楚您的代码应该如何工作(tp1
中的内容),但您使用的是Calendar
方法set
,而不是add
。 set
只是设置指定字段的值。它没有“携带”到下一个领域。
答案 1 :(得分:0)
请找到我用来安排闹钟管理器在第二天触发事件的代码段。
public void scheduleAlarm(..) {
// time at which alarm will be scheduled here alarm is scheduled at 1 day from current time,
// we fetch the current time in milliseconds and added 1 day time
// i.e. 24*60*60*1000= 86,400,000 milliseconds in a day
Long time = new GregorianCalendar().getTimeInMillis()+24*60*60*1000;
// create an Intent and set the class which will execute when Alarm triggers, here we have
// given AlarmReciever in the Intent, the onRecieve() method of this class will execute when
// alarm triggers.
Intent intentAlarm = new Intent(this, AlarmReciever.class);
// create the object
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//set the alarm for particular time
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(this, "Alarm Scheduled for Tommrrow", Toast.LENGTH_LONG).show();
}
希望这会有所帮助......