我使用setAlarmClock
Alarmmanager
方法进行闹钟应用。
当我从早上6点设置闹钟并在6.01 AM闹钟时。它延迟而且不准确。
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);
}
setCalander报警时的代码
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);
它对我不起作用,但延迟了同样的setAlarmClock。
以毫秒为单位的当前时间: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)
感谢
答案 0 :(得分:1)
您应该阅读文档。这是根据摘录的文档设计的:
注意:从API 19(KITKAT)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。有新的API支持需要严格交付保证的应用程序;请参阅setWindow(int,long,long,PendingIntent)和setExact(int,long,PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续查看之前在请求时准确传递所有警报的行为。
https://developer.android.com/reference/android/app/AlarmManager.html
答案 1 :(得分:0)
如果在闹钟中使用setAlarmClock而不是setExact。
在您的代码中:
alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(getTargetTime().getTimeInMillis(),pendingIntent),pendingIntent);
您的getTargetTime()可能有问题。尝试通过添加
手动将时间减少1分钟alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(getTargetTime().getTimeInMillis()-60*1000,pendingIntent),pendingIntent);