公司有Android设备,通过Intent.ACTION_SHUTDOWN广播可以接收到系统关机事件,收到此事件我会写日志保存到文件,有时候,我想知道是用户手动关机的,还是设备有问题自动关机的,这怎么办?最好的办法就是获取电源键的长按事件,如下:
val receiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.i("ABCD", "收到了一个广播: ${intent?.action}")
intent?.extras?.keySet()?.forEach {
Log.i("ABCD", "$it = ${intent.extras?.get(it)}")
}
}
}
registerReceiver(receiver, IntentFilter().apply {
addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
addAction(Intent.ACTION_SCREEN_OFF)
addAction(Intent.ACTION_SCREEN_ON)
})
- ACTION_SCREEN_OFF:屏幕熄灭了
- ACTION_SCREEN_ON:屏幕亮了
- ACTION_CLOSE_SYSTEM_DIALOGS:可以获取到屏幕熄灭、按了Home键、最近任务键、长按电源键,通过intent.getStringExtra(“reason”)来区分,值和对应含义如下:
- lock 熄屏,公司有台android设备是dream
- homekey Home键
- recentapps 最近任务键
- globalactions 长按电源键
当然,如果要监听电源长按事件,只注册Intent.ACTION_CLOSE_SYSTEM_DIALOGS这个广播就够了。至于监听电源的单击事件,至今仍然下落不明!