2011-10-07 100 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 
}