実装
Receiverを作っておく
class ScreenStateReceiver(
private val onScreenOn: () -> Unit,
private val onScreenOff: () -> Unit
) : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
Intent.ACTION_SCREEN_ON -> onScreenOn()
Intent.ACTION_SCREEN_OFF -> onScreenOff()
}
}
}
コールバック式にしておくことで汎用的に使いやすくする
あとはActivity側で上記のレシーバーを登録する
class MainActivity : AppCompatActivity() {
private lateinit var receiver: ScreenStateReceiver
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
receiver = ScreenStateReceiver(
onScreenOn = {
Log.d("Screen", "画面ON")
},
onScreenOff = {
Log.d("Screen", "画面OFF")
}
)
}
override fun onStart() {
super.onStart()
val filter = IntentFilter().apply {
addAction(Intent.ACTION_SCREEN_ON)
addAction(Intent.ACTION_SCREEN_OFF)
}
registerReceiver(receiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(receiver)
}
}
結果
ログ出力の結果はこんな感じになります
D/Screen: 画面OFF
D/Screen: 画面ON