Estou com um problema, fiz um aplicativo que está usando os botões de volume como contador, os botões estão fazendo a contagem direitinho, porem ao mesmo tempo que fazem a contagem estão aumentando e diminuindo o volume, alguem sabe o codigo para desabilitar o controle de voluma na Activity???
posta o código…
Em geral após capturar o botão é preciso fazer sair do método retornando true.
[code]Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
if (action == KeyEvent.ACTION_UP) {
}
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (action == KeyEvent.ACTION_DOWN) {
}
return true;
default:
return super.dispatchKeyEvent(event);
}
}[/code]
A idéia dos booleans quando se está tratando eventos é que se você retornou true significa que voce “lidou” com ele, e quem despachou pode ter certeza que alguem fez algo com o evento, mas as vezes o parent ignora esse valor e executa seu codigo mesmo assim.
Este é o codigo para os botões de volume
[code]/Função dos Botões de Volume
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
super.dispatchKeyEvent(event);
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
if (action == KeyEvent.ACTION_DOWN ) {
contador++;
mostra.setText("Contador: " + contador);
}
return super.dispatchKeyEvent(event);
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (action == KeyEvent.ACTION_DOWN) {
contador--;
mostra.setText("Contador: " + contador);
}
return super.dispatchKeyEvent(event);
default:
return super.dispatchKeyEvent(event);
}}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
[/code]
os botões de funçao de fazer contagem positiva e negativa, ele está fazendo está contagem mas ao mesmo tempo está aumentando e diminuindo o volume, oque pode resolver???
Olá
Nos dois primeiros case´s não usa “return super.dispatchKeyEvent(event);” usa “return true;” como foi indicado pelo colega fabriciov.
No default, não chama o super, usa “return false;”
Obrigado pelo ajuda pessoal, funcionou direitinho