同时检测两个硬件按钮的按下

4

我希望在我的两个硬件按钮按下时(例如音量按钮和电源按钮),能够添加监听器。但是我了解到无法覆盖电源按钮。实际上我想要拍摄屏幕截图,所以我提出了这个解决方案。所以这就是我想要实现的,如果您有任何建议,请分享。


电源按钮?不可能。但可以通过自定义固件实现。尝试另一个键组合、按键序列、触摸序列或简单按钮。 - Pulathisi Bandara
2个回答

3
在你的活动中,请尝试以下代码来实现音量上键 + 电源键。您可以减少PRESS_INTERVAL以达到像同时按下两个按钮的效果。希望这可以帮到您!
private static final int PRESS_INTERVAL = 700;
private long mUpKeyEventTime = 0;
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (KeyEvent.KEYCODE_POWER == event.getKeyCode()) {            
            if ((event.getEventTime() - mUpKeyEventTime) < PRESS_INTERVAL) {
                // This is to check if Volume UP key and Power key are pressed at the same time.
                // Do the Task. Here You can add logic to take screenshot
            }
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if(KeyEvent.KEYCODE_VOLUME_UP == keyCode){
            mUpKeyEventTime = event.getEventTime();
        }
        return super.onKeyUp(keyCode, event);
    }

2
你需要重写 onKeyDownonKeyUp 事件来检测两个按钮是否被按下。
 public boolean first,second;

 public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_POWER){
        first = true;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        second = true;
    }

    if(first && second) {
        // Two buttons pressed, Do your stuff
    }
    return true;
 }

 public boolean onKeyUp(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_POWER){
        first = false;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        second = false;
    }
    return true;
 }

但是我该如何使用电源按钮和音量按钮呢?因为同时按下音量上下键...你知道,这似乎不太合理。 - user2934930
@user2934930 请重新检查我的答案。 - Sergey Shustikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接