RTC、RTC_WAKEUP、ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUPの違いを知りたいです。
アラームを設定してアプリケーションを閉じ、設定された時間のアラームを期待するアラームアプリケーションを作成したいと考えています。
複数のアラームが発生します。現在、エミュレータ用に書いていますが、後でデバイスでテストします。エミュレーターでは、アラームを設定してエミュレーターを閉じて再起動すると、RTC、RTC_WAKEUP、ELAPSED_REALTIME でわかるようにクリアされます。私は混乱しています。ELAPSED_REALTIME_WAKEUP を使用する必要がありますか? ELAPSED_REALTIME_WAKEUP を使用したチュートリアルは見たことがありません。説明してください。ありがとう。
4 に答える
ELAPSED_REALTIME
SystemClock.elapsedRealtime() のアラーム時刻 (スリープを含む起動からの時間)。このアラームはデバイスを起動しません。デバイスがスリープしている間にオフになった場合、次にデバイスがウェイクアップするまで配信されません。
ELAPSED_REALTIME_WAKEUP
SystemClock.elapsedRealtime() のアラーム時間 (スリープを含む、起動からの時間)。オフになったときにデバイスをウェイクアップします。
RTC
System.currentTimeMillis() のアラーム時間 (UTC の壁時計時間)。このアラームはデバイスを起動しません。デバイスがスリープしている間にオフになった場合、次にデバイスがウェイクアップするまで配信されません。
RTC_WAKEUP
System.currentTimeMillis() のアラーム時間 (UTC の壁時計時間)。オフになったときにデバイスをウェイクアップします。
アラームの種類:
- ELAPSED_REALTIME – デバイスの起動から指定された時間が経過すると、保留中のインテントを起動します。デバイスがスリープ状態の場合、デバイスが次に起動したときに起動します。
- ELAPSED_REALTIME_WAKEUP – デバイスの起動から指定された時間が経過すると、保留中のインテントを起動します。デバイスがスリープ状態の場合、デバイスをウェイクアップします。
- RTC – 指定された時間に保留中のインテントを起動します。デバイスがスリープ状態の場合、次にデバイスがウェイクアップするまで配信されません。
- RTC_WAKEUP – 指定された時間に保留中のインテントを起動し、スリープしている場合はデバイスをウェイクアップします。
アラームには、「経過リアルタイム」と「リアルタイム クロック (RTC)」の 2 つの一般的なクロック タイプがあります。経過リアルタイムは「システム起動からの時間」を基準とし、リアルタイムクロックはUTC(壁時計)時間を使用します。これは、経過リアルタイムはタイムゾーン/ロケールの影響を受けないため、時間の経過に基づいてアラームを設定するのに適していることを意味します (たとえば、30 秒ごとに発生するアラーム)。リアルタイム クロック タイプは、現在のロケールに依存するアラームに適しています。
ソース: https://developer.android.com/training/scheduling/alarms.html
サイトから、4 つの定数の違いを取得できます。以下は、アラームの設定例です。
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);
これがお役に立てば幸いです