2011-10-07 83 views
3

我目前正试图听电源按钮何时按下。最终我想在按两次电源按钮时运行一些代码,以检查屏幕是否锁定或解锁。我目前有这样的:Android:听电源键按

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

该代码工作正常,为菜单键事件烤面包,但不为电源键事件做任何事情。有任何想法吗?

+0

有这个没有API,但你可以使用反射实现它。 http://stackoverflow.com/a/31872330/3496570 – Nepster

回答

7

虽然我无法抓住我最终能够猜测,电源键,通过使用侦听是否在屏幕的广播接收器按下硬件密钥关闭或打开。我用:

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

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

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

+0

嘿,AFAIK,这个意图是事件发生后播出的,是你想要的吗? –

0

我已使用android-annotations“@Receiver”注释。

添加到您的“@EActivity”注解的活动:

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