警报随机触发但不是每天触发

时间:2014-01-08 18:49:00

标签: android alarmmanager

以下代码随时会随机触发警报,但我想仅在上午8点和每天触发它。 我缺少什么,请帮助。提前谢谢。

Intent alarmIntent = new Intent(context, NotifyingDailyService.class);

PendingIntent alarmPIntent = PendingIntent.getService(context, 0, alarmIntent, 0);

// Set the alarm to start at approximately 8:00 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 0);

AlarmManager alarmMgr= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

alarmMgr.cancel(alarmPIntent);

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmPIntent);    

2 个答案:

答案 0 :(得分:0)

我相信AlarmManager.INTERVAL_DAY仅适用于对setInexactRepeating()的调用。我认为您需要将AlarmManager.INTERVAL_DAY更改为一天中的毫秒数。

INTERVAL_DAY文件 http://developer.android.com/reference/android/app/AlarmManager.html#INTERVAL_DAY

警报管理器示例 Android: How to repeat a service with AlarmManager every 15 minutes, but only run from 8:00AM to 18:00PM?

答案 1 :(得分:0)

我通过使用广播而非服务来解决自己的问题。

Intent alarmIntent = new Intent(context, DailyNotificationAlarmReceiver.class);

PendingIntent alarmPIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

// Set the alarm to start at approximately 8:00 a.m.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 0);

//System.out.println("Alarm set at 8 clock");

Toast.makeText(context, "Alarm set at 8 clock", Toast.LENGTH_LONG).show();
AlarmManager alarmMgr= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.cancel(alarmPIntent);
//alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPIntent);
//alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,     calendar.getTimeInMillis(),calendar.getTimeInMillis()+ DateUtils.DAY_IN_MILLIS, alarmPIntent);          
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,     calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, alarmPIntent);