Nick Nick - 1 year ago 210
Android Question

Android: Listen for power key press

I am currently trying to listen for when the power button is pressed. Ultimaley I would like to have an some code run when the power button is pressed twice whether the screen is locked or unlocked. I currently have this:

public void onCreate(Bundle savedInstanceState) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);//prevent phone from being locked

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

The code works fine to toast for the menu keyevent but doesn't do anything for the power key event. Any ideas?

Answer Source

Although I couldn't capture the hardware key I ended up being able guess that the power key was pressed by using a broadcast receiver that listens for whether the screen is turned off or on. I used:

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

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

I was able to be more sure that the power button was being pressed by having a count that would timeout after a couple second. This way I have the user press the power button three times to ensure that proper behavior.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download