🚀
AlarmManagerライブラリを使ってみたからアウトプット
はじめに
先日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