2011-03-26 15 views
6

Utilizando el siguiente código he detenido el uso de los botones de volumen a menos que esté transmitiendo audio (de lo contrario, cambia el volumen del tono de forma molesta), pero el botón "Atrás" no funciona.android: botón de volumen anulado ha afectado el botón Atrás?

Presionando "volver" debería llegar al escritorio de mi teléfono (o salir de mi aplicación, como era de esperar), pero no está haciendo nada. Si abro el menú, 'Atrás' cerrará el menú como debería, pero no puedo abandonar la aplicación.

He copiado el código en otras actividades dentro de mi aplicación, si abro otra actividad dentro de mi aplicación, ya que el botón 'Volver' no está funcionando, no puedo volver a la pantalla principal :)

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Suppress the use of the volume keys unless we are currently listening to the stream 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
return false; 

¿Por qué sucede esto?

+0

Hay algún otro botones afectados – katsharp

+0

¿Seguro ¿Quieres evitar que el usuario cambie el volumen de su timbre? Es un comportamiento normal en los dispositivos Android cambiar el volumen del timbre cuando no se reproduce el sonido y cambiar el volumen de los medios cuando lo esté, independientemente de la aplicación en la que se encuentre. Eso es lo que el usuario espera que suceda de la experiencia anterior. A medida que lo tengas, deben cerrar tu aplicación para cambiar el volumen de timbre. Si yo fuera tu usuario, lo llamaría una molestia en lugar de una característica. – LouieGeetoo

+0

Hola Louie, sí, estoy de acuerdo, sin embargo es una aplicación de transmisión de audio, la mayoría de los usuarios me dicen que les molesta abrir la aplicación, hacer clic en escuchar (hay una o dos pausas mientras se conecta la transmisión) y bajan el volumen de forma preventiva en caso de que sea demasiado fuerte y, en cambio, los volúmenes del timbre disminuyan. – jwbensley

Respuesta

5

no hemos probado, pero creo que es necesario incluir un otro lugar donde se llama a super.onKeyDown, es decir:

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
    code 
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
    more code 
} else { 
    super.onKeyDown(keyCode, event); 
} 

De lo contrario, estás capturando todos los códigos de teclas y volviendo falsa después de comprobar los códigos de volumen .

+0

Gracias por señalarlo :) Este es el código de trabajo final que tienen: @ Override onKeyDown pública booleano (int keyCode, KeyEvent evento) { si (== keyCode KeyEvent.KEYCODE_VOLUME_UP) { si (StreamService.INT_PLAY_STATE == 0) { return true; } else { return false; } } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { if (StreamService.INT_PLAY_STATE == 0) { return true; } else { return false; } } else { super.onKeyDown (código de clave, evento); } return false; } – jwbensley

+1

Pantalones, que no salieron como lo había dispuesto :) Para cualquier otra persona con el mismo error está aquí: http://pastebin.com/cJ7Uq0TV – jwbensley

3

Amigo, sólo cambia el contexto de audio en que la actividad de volumen multimedia:

http://developer.android.com/reference/android/media/AudioManager.html

EDIT:

private AudioManager audio; 

Dentro onCreate:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

Anulación onKeyDown:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
     return true; 
    default: 
     return false; 
    } 
} 
5

Una manera más simple y más robusto para tener las teclas de volumen siempre controlan el volumen de medios es insertar esta línea en su actividad de onCreate():

setVolumeControlStream(AudioManager.STREAM_MUSIC); 
+0

Hola, gracias por esto. Los otros habían respondido mi pregunta original, sin embargo, de hecho, he cambiado mi código para esto, es un método mejor IMO. Gracias :) – jwbensley

0
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     //your code 
     return true; 

    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
     //your code 
     return true; 
    } else { 

     super.onKeyDown(keyCode, event); 
    } 


    return true; 

} 
Cuestiones relacionadas