Android:监听电源键按下事件

3

我目前正在尝试监听电源按钮是否被按下。最终我希望在电源按钮被按两次时运行一些代码,检查屏幕是锁定还是解锁状态。我目前有以下代码:

  @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);
}

这段代码可以在菜单按键事件上正常弹出提示,但对于电源按键事件没有任何反应。有什么想法吗?


这个没有API,但你可以使用反射来实现。http://stackoverflow.com/a/31872330/3496570 - Zar E Ahmer
3个回答

8

虽然我无法捕获硬件按键,但最终通过使用监听屏幕开关状态的广播接收器,我成功猜测到了电源键是否被按下。我使用了以下代码:

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

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

我增加了一个倒计时的计数器,可以更加确信电源按钮被按下。这样,我要求用户连续按下电源按钮三次以确保正确的行为。


嘿,据我所知,此意图是在事件发生后广播的,这是你想要的吗? - Maximus
这个意图会在一两秒后广播,有人经历过吗? - Sandra

2

0

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接