I use setAlarmClock
method of Alarmmanager
for do alarm clock application. When I set alarm clock from 6.00 AM and alarm in 6.01 AM . It delay and not exact.
Code when setAlarmClock
.
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); intent.putExtra(AppConstant.REMINDER, note.convertToString()); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), note.getId(), intent, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(getTargetTime().getTimeInMillis(),pendingIntent),pendingIntent); }
Code when setCalander for alarm
private Calendar getTargetTime() { Calendar calNow = Calendar.getInstance(); Calendar calSet = (Calendar) calNow.clone(); calSet.set(Calendar.DAY_OF_MONTH, sDay); calSet.set(Calendar.HOUR_OF_DAY, sHour); calSet.set(Calendar.MINUTE, sMinute); calSet.set(Calendar.SECOND, 0); calSet.set(Calendar.MILLISECOND, 0); return calSet; }
Ok, I implement from this project https://github.com/googlesamples/android-DirectBoot.
This project use setAlarmClock for alarm when it's time.
update: I change setAlarmClock to setExact
This code:
alarmManager.setExact(AlarmManager.RTC_WAKEUP, getTargetTime().getTimeInMillis(), pendingIntent);
It doesn't work for me but It delay same setAlarmClock.
Current Time in millisecond: 1473318858628 I change to default format by use http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/#.V9EPXfmLRD8
Thu Sep 08 2016 14:14:18 GMT+0700
Set Alarm Time in millisecond:1473318960000
Thu Sep 08 2016 14:16:00 GMT+0700
And now It's 14:16:00 , It doesn't alarm.
It's alarm on 14.20:00 , so delay about 4 minutes. ( Time in millisecond = 1473319200207)
Thank