Androidは画面が点灯または消灯する ACTION_SCREEN_ON
、ACTION_SCREEN_OFF
インテントをブロードキャストで送信します。
アプリでは、このインテントを受けて、デバイスの画面がオンか、オフか知ることができます。
BroadcastReceiver登録
暗黙的(Implicit)ブロードキャスト制限ポリシーでは、ターゲットが決まっていないが、暗黙的インテントは、Contextに登録されたレシーバーのみ渡されます。つまり、AndroidManifestに登録されたレシーバは、インテントを受け取ることができなくなります。このポリシーは、Target API 26以上のアプリにのみ適用されます。
したがって、 ACTION_SCREEN_ON
、ACTION_SCREEN_OFF
インテントを受信するには、次のように Context.registerReceiver()
で動的に登録する必要があります。
val intentFilter = IntentFilter(Intent.ACTION_SCREEN_OFF)
intentFilter.addAction(Intent.ACTION_SCREEN_ON)
val receiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val action = intent!!.action
Log.d("Test", "receive : $action")
when (action) {
Intent.ACTION_SCREEN_ON -> {
// do something
}
Intent.ACTION_SCREEN_OFF -> {
// do something
}
}
}
}
registerReceiver(receiver, intentFilter);
Power keyにScreen off / onをすると、次のように出力されます。
12-23 16:31:36.922 21799 21799 D Test : receive : android.intent.action.SCREEN_OFF
12-23 16:31:38.331 21799 21799 D Test : receive : android.intent.action.SCREEN_ON
PowerManager.isInteractive()でScreen On状態の確認
isInteractive()
は、画面がオンになっている場合はtrueを返し、オフになっている場合、falseを返します。
val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
if (pm.isInteractive) {
// screen on
} else {
// screen off
}
PowerManager.isScreenOn()
APIもScreen onの状態を返します。このAPIは、deprecatedされたため、PowerManager.isInteractive()
を使用します。
Related Posts
- Android - 振動、Vibrator、VibrationEffectの例
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - PackageManagerにPackage情報を取得する
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - Foreground Service実行
- Android - 時間、日付、変更イベント受信
- Android - currentTimeMillis()、elapsedRealtime()、uptimeMillis()
- Android-PowerManager WakeLock
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - Screen On / Offイベントの受信、状態確認
- Android - 他のアプリのServiceにバインド
- Android - Handler vs Executor
- Android - Darkmode有効にする方法
- Android - hasSystemFeature()、サポートされているFeature確認
- Android - アプリの権限を確認(Permission check)
- Android - インストールされてアプリリストをインポートする
- Android App Shortcuts実装
- Android - ContentProviderを実装、および例
- Android - AIDLを利用して、Remote Serviceの実装
- Android - Uri、Scheme、SSP(Scheme Specific Part)説明
- Android - アプリのインストール、削除、イベントダウンロード(BroadcastReceiverインテントを受け取る)
- Android - SharedPreferencesに簡単なデータを保存する方法
- Android - AlarmManagerにアラームを登録する方法、および例
- Android - Quick SettingsにCustom Tile追加する方法(kotlin)
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android - ネットワーク(WIFI)の接続状態を確認し、変更の検出
- Mockito - static、final methodをmockingする方法
- Andriod - カスタムパーミッションを定義する方法
- RobolectricにUnit Testを作成する(kotlin)
- Android Mockitoのテストコードを作成する(kotlin)
- Android - Handlerの使用方法、および例
- Android - IntentService使用方法
- Android - JobIntentService使用方法