在Android平台的AlarmManager中使用setExactAndAllowWhileIdle()方法实现精确定时,避免因Doze模式等原因而延迟响铃。
以下是示例代码:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, YourBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
}
其中,triggerTime是闹钟响起的时间,需要按照系统时间来设置。如果设备处于Doze模式,系统会将所有非重要的任务延迟执行,但如果使用setExactAndAllowWhileIdle()方法,则会强制唤醒设备并执行任务。
此方法需要申请使用唤醒锁,因此需要在代码中添加权限:
上一篇:AndroidStudioAGP升级助手想要升级到相同版本
下一篇:AndroidStudioAndroidManifestXML文件中,“<activity>”元素必须是“<application>”元素的直接子元素。