2016-09-22 4 views
0

В моем приложении я переопределяю volume up и volume down ключей. Проблема в том, что когда пользователь щелкает один из этих двух клавиш, воспроизводится звук. Я хочу как-то отключить/отключить звук.Отключить звук при нажатии клавиш регулировки громкости

Вот фрагмент моего кода:

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

    switch (keyCode) { 

     case KeyEvent.KEYCODE_VOLUME_DOWN: { 
      // do something when user click volume down key 

      return true; 
     } 
     case KeyEvent.KEYCODE_VOLUME_UP: { 
      // do something when user click volume up key 

      return true; 
     } 

    } 
    return super.onKeyDown(keyCode, event); 
} 

ответ

1

Использование onKeyDown или onKeyUp по-прежнему дает звук по умолчанию для изменения громкости. Вместо этого используйте dispatchKeyEvent.

@Override 
public boolean dispatchKeyEvent(KeyEvent event) { 
    int keyCode = event.getKeyCode(); 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     return true; 
    default: 
     return super.dispatchKeyEvent(event); 
    } 
} 
+0

Использование 'dispatchKeyEvent' вы можете обнаружить, когда нажата кнопка, но вы не можете определить, в какой позиции находится кнопка (вверх или вниз). В моем примере я использовал 'onKeyDown'. Этот метод не удаляет звук, поэтому мне пришлось играть бесконечным звуком. – Da2da2

+0

Нет, в моем примере вы можете увидеть keyCode и использовать его таким же образом. Он работает, я использую этот метод в своем приложении. –

+0

Я не говорю, что ваш метод не работает, все в порядке, но не в моей ситуации. Я хочу, как я сказал, обнаружить, когда кнопка находится в положении ** вверх ** или ** вниз **. Если я нажму кнопку (например, «KEYCODE_VOLUME_UP») один раз, 'dispatchKeyEvent' будет вызываться два раза, если я делаю это с' onKeyDown' и 'onKeyUp', они будут запускаться один за другим один раз, оставляя меня более подробным информацию о текущем состоянии кнопки. – Da2da2

0

я понял это для себя. Существует способ остановить звук при нажатии клавиши регулировки громкости. Вам нужно бесконечно воспроизводить пустой звук, поэтому, когда пользователь щелкает ключом тома, он «пытается» изменить громкость мультимедиа, поэтому звук щелчка не воспроизводится. Вы можете скачать пустой звук, выполнив поиск empty sound, а затем положите его в папку raw в проекте. Последний шаг - это просто переопределить клавиши регулировки громкости.

Вот код, который нужно:

Определить переменную MediaPlayer.

private MediaPlayer infinite_sound; 

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

@Override 
protected void onResume() { 
    super.onResume(); 

    infinite_sound = MediaPlayer.create(this, R.raw.empty); 
    infinite_sound.setLooping(true); 
    infinite_sound.start(); 
} 

В onPause() вам необходимо остановить звук.

@Override 
public void onPause() { 
    super.onPause(); 

    infinite_sound.release(); 
} 

И, наконец, переопределение действий кнопок.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_DOWN: { 
      // Do something when volume down button is clicked 

      return true; 
     } 
     case KeyEvent.KEYCODE_VOLUME_UP: { 
      // Do something when volume up button is clicked 

      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
Смежные вопросы