我想知道 RTC,RTC_WAKEUP,ELAPSED_REALTIME,ELAPSED_REALTIME_WAKEUP 之间的区别。
我想编写一个警报应用程序,我将设置警报并关闭我的应用程序,并期望在设置的时间内发出警报
会有多个警报。现在我正在为模拟器编写,但稍后将在设备上进行测试。在模拟器中,一旦我设置了警报并关闭模拟器并重新启动它,那么它将被清除,正如我在RTC,RTC_WAKEUP和ELAPSED_REALTIME中找到的那样。我很迷惑。我应该使用ELAPSED_REALTIME_WAKEUP吗?我还没有看到任何使用ELAPSED_REALTIME_WAKEUP的教程。
请解释。
感谢。
答案 0 :(得分:17)
ELAPSED_REALTIME
SystemClock.elapsedRealtime()中的闹钟时间(自启动以来的时间,包括睡眠)。此警报不会唤醒设备;如果它在设备处于睡眠状态时熄灭,则在下次设备唤醒时才会发送。
ELAPSED_REALTIME_WAKEUP
SystemClock.elapsedRealtime()中的闹钟时间(启动后的时间,包括睡眠时间),它将在设备关闭时唤醒设备。
RTC
System.currentTimeMillis()中的闹钟时间(以UTC为单位的挂钟时间)。此警报不会唤醒设备;如果它在设备处于睡眠状态时熄灭,则在下次设备唤醒时才会发送。
RTC_WAKEUP
System.currentTimeMillis()中的闹钟时间(以UTC为挂钟时间),它将在设备关闭时唤醒设备。
答案 1 :(得分:8)
警报类型:
答案 2 :(得分:1)
警报有两种通用时钟类型:“已用实时”和“实时时钟”(RTC)。经过实时使用“自系统启动以来的时间”作为参考,实时时钟使用UTC(挂钟)时间。这意味着经过的实时时间适合根据时间的推移设置警报(例如,每隔30秒触发一次警报),因为它不受时区/区域设置的影响。实时时钟类型更适合依赖于当前区域设置的警报。
来源:https://developer.android.com/training/scheduling/alarms.html
答案 3 :(得分:0)
从网站上你可以得到4个constanst之间的区别 以下是设置警报的示例
Calendar mCalendar = Calendar.getInstance();
mCalendar.add(Calendar.SECOND, 20);
Intent intent_Timer = new Intent(TimerEvents.this, AlarmReceiver.class);
intent_Timer.putExtra("alarm_message", "Drax Rules!!!");
// In reality, you would want to have a static variable for the request
// code instead of 192837
PendingIntent sender = PendingIntent.getBroadcast(this, 192837,
intent_Timer, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), sender);
希望这会对你有所帮助
答案 4 :(得分:-4)