Android - 時間、日付、変更イベント受信

By JS | Last updated: December 24, 2020

Androidは、日付、時刻が変更されたときのアプリにインテントを転送します。

ユーザーが直接時刻の設定を変更したり、システムによって変更されると、次のインテントが配信されます。つまり、このインテントを受け取る時間の設定が変更されたことを検出することができます。

  • ACTION_TIME_CHANGED
  • ACTION_TIMEZONE_CHANGED

時間が流れTimeやDateが変更されるときは、次のテントが渡されます。つまり、このインテントを受け取る時間が過ぎたのかを認識することができます。

  • ACTION_TIME_TICK
  • ACTION_DATE_CHANGED

それぞれのインテントについての例と一緒に説明します。

ACTION_TIME_CHANGED

ACTION_TIME_CHANGEDは、システムの時刻または日付が変更されるときに送出されます。ユーザーが直接Settingsアプリで日付と時刻を変更しても、このインテントが配信されます。

ここで、時間、日付変更の意味は、時間が過ぎて変更されたものではなく、システムまたはユーザーによって、時間、日付の設定が変更されたことを意味します。

次のようにインテントを受け取ることができます。

val intentFilter = IntentFilter(Intent.ACTION_TIME_CHANGED)

val receiver = object: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("Test", "receive : ${intent.action}")
    }
}

Output:

12-25 10:03:51.128 16239 16239 D Test    : receive : android.intent.action.TIME_SET

ちなみに、 Intent.ACTION_TIME_CHANGEDの文字列は、"android.intent.action.TIME_SET"で定義されているので、Actionを出力してみるとTIME_SETで出力されます。

/**
 * Broadcast Action: The time was set.
 */
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_TIME_CHANGED = "android.intent.action.TIME_SET";

ACTION_TIMEZONE_CHANGED

Time Zoneが変更される ACTION_TIMEZONE_CHANGEDインテントが配信されます。たとえば、ユーザーがSettingsアプリでTime Zoneを米国から英国に変更すると、このインテントが配信されます。

val intentFilter = IntentFilter(Intent.ACTION_TIMEZONE_CHANGED)

val receiver = object: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("Test", "receive : ${intent.action}")
    }
}

Output:

12-24 14:48:06.800 16239 16239 D Test    : receive : android.intent.action.TIMEZONE_CHANGED

ACTION_TIME_TICK

ACTION_TIME_TICKインテントは、時間が変更されるときに送出され、1分ごとに配信しています。

val intentFilter = IntentFilter(Intent.ACTION_TIME_TICK)

val receiver = object: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("Test", "receive : ${intent.action}")
    }
}

上記のコードを実行してみると、1分ごとに ACTION_TIME_TICKインテントが配信されるのを見ることができます。

12-24 09:57:00.007 14833 14833 D Test    : receive : android.intent.action.TIME_TICK
12-24 09:58:00.017 14833 14833 D Test    : receive : android.intent.action.TIME_TICK
12-24 09:59:00.188 14833 14833 D Test    : receive : android.intent.action.TIME_TICK
12-24 10:00:00.013 16239 16239 D Test    : receive : android.intent.action.TIME_TICK

ACTION_DATE_CHANGED

ACTION_DATE_CHANGEDインテントは、日付が変更されるときに送出されます。例えば、 11:59 PMで1分が過ぎ00:00 AMになると日付が変更されるが、このとき、このインテントが配信されます。

val intentFilter = IntentFilter(Intent.ACTION_DATE_CHANGED)

val receiver = object: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("Test", "receive : ${intent.action}")
    }
}

Settingsアプリで時間を 11:59 PMに変更して、1分を待ってインテントが配信されることを確認することができます。

12-25 00:00:00.412 13074 13074 D Test    : receive : android.intent.action.DATE_CHANGED

Related Posts

codechachaCopyright ©2019 codechacha