我使用AlarmManager
的setAlarmClock
方法来制作闹钟应用程序。当我将闹钟设置为早上6点,闹钟在早上6点01分响起时,它会延迟并不准确。
以下是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);
}
为闹钟设置日历时的代码
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;
}
好的,我从这个项目中实现:https://github.com/googlesamples/android-DirectBoot。
该项目在时间到达时使用setAlarmClock进行闹钟设置。
更新:我将setAlarmClock更改为setExact。
这是代码:
alarmManager.setExact(AlarmManager.RTC_WAKEUP, getTargetTime().getTimeInMillis(), pendingIntent);
对我来说它不起作用,但它延迟了同样的设置闹钟。
当前时间(毫秒):1473318858628,我使用http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/#.V9EPXfmLRD8将其更改为默认格式。
Thu Sep 08 2016 14:14:18 GMT+0700
设置闹钟的时间(毫秒):1473318960000
Thu Sep 08 2016 14:16:00 GMT+0700
现在是14:16:00,但它没有响铃。
它将在14:20:00响铃,所以延迟了约4分钟。(毫秒时间=1473319200207)
谢谢