Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android KeyEvent.KEYCODE\u VOLUME\u UP(DOWN)记录双击_Android_Button_Volume - Fatal编程技术网

Android KeyEvent.KEYCODE\u VOLUME\u UP(DOWN)记录双击

Android KeyEvent.KEYCODE\u VOLUME\u UP(DOWN)记录双击,android,button,volume,Android,Button,Volume,我有一个简单的应用程序,可以执行以下操作: public void onClick(View v){ switch(v.getId()) { case R.id.buttonup: onButtonUp(); break; case R.id.buttondown: onButtonDown(); break; } } public b

我有一个简单的应用程序,可以执行以下操作:

public void onClick(View v){

    switch(v.getId()) {     
        case R.id.buttonup:
            onButtonUp();
            break;

        case R.id.buttondown:
            onButtonDown();
            break;
    }

}

public boolean dispatchKeyEvent(KeyEvent event){
        int keyCode = event.getKeyCode();
        switch (keyCode) {

        case KeyEvent.KEYCODE_VOLUME_UP:
             onButtonUp();
             return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            onButtonDown();
            return true;

        default:
            return super.dispatchKeyEvent(event);

        }

    }

void onButtonUp(){
    increment_some_static_class_variable;
}

void onButtonUp(){
    decrement_some_static_class_variable;
}

问题是,每当我按下音量按钮时,onButtonUp和onButtondown函数都会被调用两次。当我按下屏幕上的按钮(在onClick(视图)中处理)时,不会发生这种情况。我没有发现任何人有这个问题,所以我问这里的人。我是Android新手,这是我的第一个应用程序。使用日志,我发现对onButtonUp和onButtonDown的调用都来自dispatchKeyEvent函数。这里可能出了什么问题?我希望我能很好地解释这个问题。建议/解决方案是最受欢迎的。

KeyEvent可以表示多个动作,特别是动作向下和动作向上。由于您没有检查dispatchKeyEvent回调中的操作,因此您正在为音量按钮上的DOWN和UP事件调用button click方法。试着这样做:

public boolean dispatchKeyEvent(KeyEvent event){
    int keyCode = event.getKeyCode();
    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch (keyCode) {

            case KeyEvent.KEYCODE_VOLUME_UP:
                 onButtonUp();
                 return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                onButtonDown();
                return true;

            default:
                return super.dispatchKeyEvent(event);
        }
    }
}

谢谢你的回答。使动作向上和向下非常清楚:-)我刚刚添加了return false;在if语句之外。希望这是对的。AFAIK false对于所有意图和目的来说都是好的,但另一个选项是
返回super.dispatchKeyEvent(event)