🚀

AlarmManagerライブラリを使ってみたからアウトプット

2024/03/14に公開

はじめに

先日AlarmManagerライブラリを使用してアラームアプリを制作していました。
AlarmManagaerライブラリを使うにあたって知っておくべきことや、気をつけるべきことを書いていきます!

知っておくべきこと

AlarmManagaerライブラリにセットするタイミングは大事です。
もしセットし忘れてしまえばレビューの低評価間違いなしです。

アラームとリマインダーの権限をリクエストする必要がある

API34以前は権限をリクエストする必要はないのですが、残念ながらAPI34以降は権限をリクエストする必要があります。

 fun checkAndRequestAlarmPermission(context: Context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
            if (!alarmManager.canScheduleExactAlarms()) {
                val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
                context.startActivity(intent)
            }
        }
    }

アプリが開いたら毎回リセットされてしまう

このライブラリはOSレベルのライブラリであるため、アプリが起動している間だけではなく、アプリを終了した後もアラームはセットされ続けます。
しかし、アラームを再起動するとアラームの設定はリセットされてしまいます。そのため、毎回アラーム起動時に再設定する必要があります。

再起動時やアップデート時は、再セットしないといけない

アプリが開いたら毎回リセットされてしまうと言いましたが、スマホを再起動した時や、アプリがアップデートされた時も同様にリセットされてしまいます。

        when (intent.action) {
            Intent.ACTION_MY_PACKAGE_REPLACED -> setAlarm(context)
            Intent.ACTION_BOOT_COMPLETED -> setAlarm(context)
        }

ACTION_MY_PACKAGE_REPLACED

アプリがアップデートされた時に自動的に実行されます。

ACTION_BOOT_COMPLETED

スマホが再起動された時に自動的に実行されます。

忘れずに書きましょう。
ただし、MY_PACKAGE_REPLACEDはバージョンコードを更新しないと発火しないので、デバック中に毎回更新することは非現実的です。そのため、ACTION_BOOT_COMPLETEDの処理で再セットされるか確認するしかありません。

adbコマンド使用して確認してみよう!

以下のコマンドでアラームの設定状況を確認できます。applicationnameはあなたのプロジェクト名に変更して下さい。

adb shell dumpsys alarm | grep applicationname

Discussion