1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スリープか否かでonPause時の処理を変えたい

Posted at

とあるアプリにて、勉強中に他のアプリを開いたり、当アプリを閉じていないかを検知する機能を実装しました。また、勉強中にずっとアプリを開いていなければならないのはUX的にマズいので、スリープ時はonPause時の処理から除外するようにもしました。

ソースコード

//画面外検知の為にオーバーライド
override fun onPause() {
    super.onPause()
    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
    if (powerManager.isInteractive) {
        //ここに別画面に移った際の処理を記述
    }
}

簡単な解説

onPause

そもそもonPauseとは何かというと、アプリがバックグラウンドへ遷移したときに呼び出されるコールバックのことです。具体的には、アプリからホーム画面に遷移したときや、タスクボタンが押されたとき、スリープ状態になったときなどにonPause()が呼び出されます。

PowerManager

PowerManagerとは、デバイスの電源管理やスリープ制御ができるシステムサービスです。例えば、デバイスのスリープを防ぐようにしたり(WakeLock)、省電力モードであるかどうかを監視する(isPowerSaveMode)ことができます。

今回は、isInteractiveを用いて画面がオンになっている(スリープ状態でない)ことを検知させて、スリープか否かでonPause時の処理を変えることを実現することができました。

実際の動作

screen-20250109-1858393.gif
無事スリープ時にはタイマーが止まらず、アプリから離れようとした際にタイマーが止まるようになりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?