Взяв на себя клавишу громкости на Android - PullRequest
6 голосов
/ 10 июля 2010

Я хочу взять на себя вход по громкости вверх и вниз. На данный момент мой код:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    Log.v(TAG, event.toString());
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
        mLamp.moveBackward();

        return false;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        mLamp.moveForward();

        return false;
    }

    return true;
}
public boolean onKeyUp(int keyCode, KeyEvent event) {

    Log.v(TAG, event.toString());
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){
        return false;
    }
    else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){
        return false;
    }

    return true;
}

Это запускает функции mLamp.moveBackward() и mLamp.moveForward(), но все равно изменяет громкость звонка. Что мне нужно сделать, чтобы громкость звонка не изменилась?

Ответы [ 3 ]

19 голосов
/ 10 июля 2010

Если вы обработали событие, верните true. Если вы хотите, чтобы событие было обработано следующим получателем, возврат false.

8 голосов
/ 09 октября 2012

Важно возвращать true, если вы обработали событие, но если вы не обработали событие, хорошо убедиться, что событие все еще обрабатывается суперклассом. Вот код из моего приложения:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
        keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        changeColor(keyCode);

        return true;
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
        keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        // do nothing                                                       

        return true;
    }

    return super.onKeyUp(keyCode, event);
}

В моем случае вызов суперкласса был необходим, чтобы другие аппаратные кнопки на моем устройстве продолжали работать.

0 голосов
/ 17 мая 2013
public boolean dispatchKeyEvent(KeyEvent event) {

    if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {             
            return true;
    } else if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
            return true;
    }
    return dispatchKeyEvent(event);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...