提问人:DevPeter 提问时间:10/21/2023 最后编辑:Marcin OrlowskiDevPeter 更新时间:10/21/2023 访问量:38
为什么 Android 在手机设备上没有检测到任何物理按钮的按下?
Why does Android not detect any press of physical buttons on mobile phone devices?
问:
我正在使用 Android Studio Giraffe 2022.3.1 补丁 2,例如,当我按下物理手机上的电源或音量物理按钮时,日志是空的。我使用两种不同的设备,一种是Android 12(三星A10),另一种是Android 8。
我在这里的目标是检测电源按钮的按下,以便我可以在执行 power 命令之前将一些日志保存到 DB。
这是我用来检测任何物理按钮按下的代码:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
int keyPressed = event.getKeyCode();
Log.d("MainActivity","\nonKeyDown" +
"\nkey code: " + keyCode + "" +
"\nevent key pressed: " + keyPressed );
return super.onKeyDown(keyCode, event);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyPressed = event.getKeyCode();
Log.d("MainActivity","\ndispatchKeyEvent" +
"\nevent key pressed: " + keyPressed );
return super.dispatchKeyEvent(event);
}
答:
0赞
CommonsWare
10/21/2023
#1
我在这里的目标是检测电源按钮的按下
AFAIK,该按钮按下不会发送到应用程序,而是纯粹由系统处理。HOME按钮的工作原理与此类似。
如果您愿意,欢迎您尝试收听广播。然而。。。ACTION_SCREEN_OFF
这样我就可以在执行 power 命令之前将一些日志保存到 DB。
就“在执行电源命令之前”部分而言,这实际上行不通。操作系统不会等待一堆应用程序在处理按钮按下之前执行任意操作。
另外,请记住,在 Android 14 之前,您的进程很可能只是在后台被终止。在按下电源按钮之前保存日志意味着您将丢失这些日志。相反,请立即或定期保存它们。
评论
0赞
DevPeter
10/21/2023
我不确定你说的“HOME按钮的工作方式类似”是什么意思。我检测到按下主页按钮没有任何问题,并且使用视图模型,我正在将一些数据保存到数据库。然后在使用观察器的活动中,我正在执行主页按钮应该执行的操作。
0赞
CommonsWare
10/21/2023
@DevPeter:这从来都行不通。它也不是特别有用。还有许多其他方法可以将应用移动到后台,这些方法不涉及按下 HOME 按钮(或等效手势)。将注意力集中在几个按钮上可能会忽略所有其他可能性或重复您的工作。
0赞
DevPeter
10/21/2023
@CommonsWare在这种特定情况下,我的重点是“人为错误”。当有人下载重要信息时,您不希望用户按“返回”或“主页”按钮(或者您可以做出反应)。当用户按下电源按钮时,你想知道它以供将来调查。在保存一些数据(字符串日志)方面,我可以使用 onSaveInstanceState 和 onRestoreInstanceState,但是,如果我不知道是什么原因导致的(电源按钮),那么有什么意义呢?
评论