如何为特定的日期、小时、分钟和秒设置 AlarmManager
how to set AlarmManager for specific date, hour, minute and second
闹钟在指定时间不响
(2018 年 12 月 20 日,12:10:02)
这段代码有什么问题?
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH,12);
c.set(Calendar.YEAR,2018);
c.set(Calendar.DAY_OF_MONTH,20);
c.set(Calendar.HOUR_OF_DAY,12);
c.set(Calendar.MINUTE,10);
c.set(Calendar.SECOND,2);
Intent intent = new Intent(ProfileList.this, IntentBroadcastedReceiver.class);
PendingIntent pintent = PendingIntent.getService(ProfileList.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 30*1000, pintent);
使用 java.time
api 代替:
The LocalDateTime is used to represent a combination of date and time.
import java.time;
LocalDateTime ldt = LocalDateTime.of(2018, Month.DECEMBER, 20, 12, 10);
// or just parse it from string:
LocalDateTime ldt2 = LocalDateTime.parse("2018-12-20T12:10:00");
// after that, you can get millis for your zone this way:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
long currentTimeMillis = zdt.toInstant().toEpochMilli();
//... your code
alarm.setRepeating(AlarmManager.RTC_WAKEUP, currentTimeMillis, 30*1000, pintent);
有关数据,请参阅本指南:
http://www.baeldung.com/java-8-date-time-intro
Android早于26的,使用ThreeTenABP适配ThreeTen-Backport项目的ThreeTen-Backport项目java.time 的大部分功能 Java 6 & 7.
我知道了,月份是从0开始的,应该是:
c.set(Calendar.MONTH,11); //December
以下代码对我有用:
// for Alarm 15/09/2018 at 12.00
Calendar myAlarmDate = Calendar.getInstance();
myAlarmDate.setTimeInMillis(System.currentTimeMillis());
myAlarmDate.set(2012, 09, 15, 12, 00, 0);
AlarmManager alarmManager = (AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
Intent _myIntent = new Intent(context,AlarmReceiverNotificationForEveryMonth.class);
_myIntent.putExtra("MyMessage","HERE I AM PASSING THEPERTICULAR MESSAGE WHICH SHOULD BE SHOW ON RECEIVER OF ALARM");
PendingIntent _myPendingIntent = PendingIntent.getBroadcast(context, 123, _myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, myAlarmDate.getTimeInMillis(),_myPendingIntent);
希望对你有帮助。
闹钟在指定时间不响 (2018 年 12 月 20 日,12:10:02)
这段代码有什么问题?
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH,12);
c.set(Calendar.YEAR,2018);
c.set(Calendar.DAY_OF_MONTH,20);
c.set(Calendar.HOUR_OF_DAY,12);
c.set(Calendar.MINUTE,10);
c.set(Calendar.SECOND,2);
Intent intent = new Intent(ProfileList.this, IntentBroadcastedReceiver.class);
PendingIntent pintent = PendingIntent.getService(ProfileList.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 30*1000, pintent);
使用 java.time
api 代替:
The LocalDateTime is used to represent a combination of date and time.
import java.time;
LocalDateTime ldt = LocalDateTime.of(2018, Month.DECEMBER, 20, 12, 10);
// or just parse it from string:
LocalDateTime ldt2 = LocalDateTime.parse("2018-12-20T12:10:00");
// after that, you can get millis for your zone this way:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
long currentTimeMillis = zdt.toInstant().toEpochMilli();
//... your code
alarm.setRepeating(AlarmManager.RTC_WAKEUP, currentTimeMillis, 30*1000, pintent);
有关数据,请参阅本指南: http://www.baeldung.com/java-8-date-time-intro
Android早于26的,使用ThreeTenABP适配ThreeTen-Backport项目的ThreeTen-Backport项目java.time 的大部分功能 Java 6 & 7.
我知道了,月份是从0开始的,应该是:
c.set(Calendar.MONTH,11); //December
以下代码对我有用:
// for Alarm 15/09/2018 at 12.00
Calendar myAlarmDate = Calendar.getInstance();
myAlarmDate.setTimeInMillis(System.currentTimeMillis());
myAlarmDate.set(2012, 09, 15, 12, 00, 0);
AlarmManager alarmManager = (AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
Intent _myIntent = new Intent(context,AlarmReceiverNotificationForEveryMonth.class);
_myIntent.putExtra("MyMessage","HERE I AM PASSING THEPERTICULAR MESSAGE WHICH SHOULD BE SHOW ON RECEIVER OF ALARM");
PendingIntent _myPendingIntent = PendingIntent.getBroadcast(context, 123, _myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, myAlarmDate.getTimeInMillis(),_myPendingIntent);
希望对你有帮助。