Android:听电源按键

时间:2011-10-07 00:42:31

标签: android keyevent

我正在尝试收听按下电源按钮的时间。最后,我希望在按两次电源按钮时运行一些代码,以检查屏幕是锁定还是解锁。我目前有这个:

  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked
}

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_POWER:
        {
            Toast.makeText(getBaseContext(), "Power button pressed", Toast.LENGTH_LONG).show();

            return true;
        }
        case KeyEvent.KEYCODE_MENU:
            Toast.makeText(getBaseContext(), "Menu Button Pressed", Toast.LENGTH_LONG).show();

            return true;
    }
    return super.onKeyDown(keyCode, event);
}

代码可以正常使用菜单键事件但不会为电源键事件做任何事情。有什么想法吗?

3 个答案:

答案 0 :(得分:7)

虽然我无法捕获硬件密钥,但我最终还是可以通过使用广播接收器来猜测是否已按下电源键,该广播接收器会监听屏幕是否已关闭或打开。我用过:

            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                    //do something 
            }

            else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                    //do something else
            }

我能够更加确定按下电源按钮的计数会在几秒后超时。这样我就让用户按下电源按钮三次以确保正确的行为。

答案 1 :(得分:2)

AFAIK,Power密钥无法使用。

您可能想参考这个答案:http://groups.google.com/group/android-developers/browse_thread/thread/a4db4def1bdaa8d9

答案 2 :(得分:0)

我已经使用了android-annotations" @ Receiver"注释

将此添加到您的" @ EActivity"注释活动:

@Receiver(actions = Intent.ACTION_SCREEN_OFF)
protected void onPowerButtonPressed() {
// add your code
}