检测开/关键按Android键

时间:2011-07-27 17:17:44

标签: java android listener keylistener

如何检测按下的电源按钮或锁定屏幕按钮?当我的游戏以这种方式暂停时,它可能会导致游戏崩溃,因为我需要在线程发生时暂停它。

6 个答案:

答案 0 :(得分:18)

从克里斯蒂安回答this question

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
        // do what you want with the power button
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

然而Jake Basile是对的。除非你在按下电源按钮时有充分的理由做一些特别的事情,否则你应该使用标准的Android生命周期功能。

按下电源按钮时,它将调用应用程序的onPause()方法,当您解锁设备时,它将调用onResume()。这是您应该管理线程以防止应用程序崩溃的地方。

documentation on Activity's将为您提供生命周期函数的详细描述,调用它们以及如何使用它们。 enter image description here

答案 1 :(得分:8)

使用onPauseonResume方法。当您的应用程序不再位于前台(当锁定屏幕出现时)或手机处于睡眠状态时,以及当您的应用程序返回到前台时,系统会调用这些内容。

这是Android中活动生命周期的标准流程,更完整地记录了here

答案 2 :(得分:2)

这个问题的很多答案忽略了这样一个事实,即在编写应用程序时,了解哪个事件导致调用特定标准Android生命周期函数非常重要。有一个onBackPressed()函数;为什么没有onPowerPressed()和onHomePressed()呢?应用程序通常需要在标准生命周期函数中执行不同的操作,具体取决于调用它们的事件。现在,弄清楚是否按下主页按钮或电源按钮来调用标准生命周期方法是一件非常痛苦的事。

答案 3 :(得分:1)

要检测Android应用是否正在启动或停止,您可以使用以下规则:

  • 当用户进入时,总是调用onResume(在当前活动上)
  • 当用户离开时,总是调用onStop(在当前活动中),除非按下电源按钮(关闭),可能只能看到onPause电话。
  • 当用户在活动之间移动时,总是在新活动上调用onResume,并且始终在旧活动上调用onStop。 onResume调用始终在onStop之前

此处有更多信息:http://www.artificialworlds.net/blog/2015/06/05/detecting-whether-an-android-app-is-stopping-or-starting/

答案 4 :(得分:0)

答案 5 :(得分:0)

覆盖生命周期方法。在Android()中不再允许使用用于检测按下被选为答案的电源按钮的解决方案