【问题标题】:Android: Listen for power key pressAndroid:听电源键按下
【发布时间】:2011-12-02 16:18:09
【问题描述】:

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

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

代码可以很好地为菜单键事件敬酒,但对电源键事件没有任何作用。有什么想法吗?

【问题讨论】:

标签: android keyevent


【解决方案1】:

虽然我无法捕获硬件键,但我最终能够通过使用监听屏幕是关闭还是打开的广播接收器来猜测电源键被按下。我用过:

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

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

通过在几秒钟后超时的计数,我能够更加确定是否按下了电源按钮。这样,我让用户按三下电源按钮以确保正确的行为。

【讨论】:

  • 嘿,AFAIK,这个意图是在事件发生后广播的,是你想要的吗?
  • 这个意图广播了~一两秒后,有人经历过吗?
【解决方案2】:

AFAIK,Power 键是不可能的。

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

【讨论】:

    【解决方案3】:

    我用过android-annotations“@Receiver”注解。

    将此添加到您的“@EActivity”注释活动中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多