KEYCODE_POWER仅在长按时发送

时间:2012-09-10 14:20:50

标签: android keycode dispatch

为什么这个密钥只能在长时间内发送。我试图让它正常按下电源按钮使Ringer流中正在播放的音频静音。它仅适用于长按,正常按下可关闭屏幕。我需要它在正常的印刷机上工作。

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

        switch (event.getKeyCode()) {
        case KeyEvent.KEYCODE_POWER:
            if (ringer == null)
                return super.dispatchKeyEvent(event);

            if (!mute)
                if (ringer.isRinging())
                    ringer.stopRing();
                else if (!ringer.isRinging())
                    ringer.ring();

            mute = !mute;
            return true;
        }
return super.dispatchKeyEvent(event);

}

2 个答案:

答案 0 :(得分:2)

如此处https://stackoverflow.com/a/15828732/1065357

所述

如果您在活动中或在具有焦点的视图中覆盖此方法,则用户无法长按电源按钮

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(!hasFocus) {
        Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        sendBroadcast(closeDialog);
    }
}

答案 1 :(得分:1)

捕获正在按下的POWER按钮需要更多时间。

这是由Google有目的地完成的,因此恶意应用程序无法通过阻止任何用户输入和阻止硬件按钮来接管您的设备。除此之外,只有在有充分理由的情况下才能覆盖POWER按钮。

如果您想知道如何操作,请访问THIS问题并查看评分最高的答案。

PS。下次搜索。