2012-07-25 20 views
9

Estoy probando mi aplicación en galaxia S3, que tiene dos botones de un toque en el botón Atrás y el botón de menúDesactivar todos los efectos de sonido (teclas de hardware también) en Android

me puse a soundEffectsEnabledfalse a todos de mis vistas de raíz, e intenté crear un tema personalizado (como se señala en here) y establecer ese tema en el archivo de manifiesto de la aplicación (traté de agregarlo a cada elemento Activity, también). Sin éxito.

Aquí está mi archivo XML en res/Valores:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<style name="MyCustomTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen"> 
    <item name="android:soundEffectsEnabled">false</item> 
</style> 
</resources> 

Y la etiqueta de apertura de mi elemento Application:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/MyCustomTheme" > 

se construye y funciona adecuadamente. NoTitleBar.Fullscreen también funciona, pero los botones táctiles de menú y de fondo reproducen el sonido.

+0

está girando todo el dispositivo en modo de silencio es una opción? Porque, según tengo entendido, el proceso del sistema controla la parte posterior, el hogar, los recientes y cualquier otra clave de hardware. –

Respuesta

2

Puede usar el AudioManager para silenciar todos los sonidos del sistema mientras se ejecuta su aplicación o cualquiera de sus actividades.

setStreamMute (int, boolean)

Silenciar o activar un flujo de audio.

El comando de silenciamiento está protegido contra la muerte del proceso del cliente: si un proceso con una solicitud de silenciamiento activo en una secuencia muere, esta corriente se se activará automáticamente.

Las peticiones de silencio para una corriente dada son acumulativos: el AudioManager puede recibir varias peticiones de silencio a partir de uno o más clientes y la corriente sonido se activará sólo cuando se reciben el mismo número de peticiones de activar el sonido de .

Para una mejor experiencia de usuario, las aplicaciones DEBEN restablecer el silencio de una secuencia silenciada en onPause() y mute nuevamente en onResume() si corresponde.

Por lo tanto, la puesta en práctica se parece a esto

@Override 
protected void onResume() { 
    super.onResume(); 
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, true); 
} 

@Override 
protected void onPause() { 
    AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    audioManager.setStreamMute(AudioManager.STREAM_SYSTEM, false); 
    super.onPause(); 
} 
Cuestiones relacionadas