2012-03-29 14 views
6

Tengo this.setVolumeControlStream(AudioManager.STREAM_MUSIC); al comienzo de todas las actividades en mi aplicación, así que cuando el usuario presiona los botones de subir o bajar el volumen, él controla el volumen de medios.setVolumeControlStream no funciona cuando se muestra una ventana emergente

Tengo una ventana emergente en mi programa y cuando eso aparece el usuario ya no puede controlar el volumen.

En cuanto a las preguntas similares, parece que la creación de onKeyup/down oyentes puede interferir con el proceso - pero no se ha definido ninguna arriba - los únicos oyentes que tengo acerca de la ventana emergente son setOnClickListeners para los botones y una setOnDismissListener de la ventana.

¿Cómo puedo solucionar esto?

Respuesta

0

que había sido la creación de la ventana emergente con

my_popup_window = new PopupWindow(layout, x, y, true); 

luego lo cambio a este ...

my_popup_window = new PopupWindow(layout); 
my_popup_window.setWidth(x); 
my_popup_window.setHeight(y); 

y el control de volumen de empezar a trabajar de nuevo. No entiendo por qué, pero funcionó.

1

Parece que tiene que llamar al setOwnerActivity en el objeto Dialog.

Documentación del método:

Establece la actividad que posee este diálogo. Un uso de ejemplo: este cuadro de diálogo usará el flujo de control de volumen sugerido de la actividad.

Si bien no se ha probado, esto debería hacer el truco. También existe la posibilidad de usar setVolumeControlStream.

+0

Tristemente tengo una ventana emergente, no un cuadro de diálogo, y ni setOwnerActivity ni setVolumeControlStream parecen estar disponibles. – Mick

+0

Entonces estás de suerte, aceché a través de la fuente AOSP de 'PopupWindow.java' y' Dialog.java' a la forma en que podría hacerse, pero simplemente no puede. El 'PopupWindow' hace uso de la API privada de' WindowManager' para mostrar la vista. Debería llamar a 'setVolumeControlStream()' en la 'Ventana', pero simplemente no se usa. ¿Hay alguna posibilidad de que pueda cambiar a una ventana basada en 'Dialog'? – Luminger

+0

Lo investigaré, pero no estoy seguro porque esta es la ventana más complicada que he hecho. Es altamente personalizado, contiene animaciones y se crea totalmente programáticamente. – Mick

0

Acabo de hacer esto pop.setFocusable(false). Y funcionó.

0

aunque la respuesta de Mick no funcionó para mí, esto es para la posteridad.

//Declaration 
PopupWindow mWindow; 
... 

//Constructor 
mWindow  = new PopupWindow(context); 
... 

//Prepare to Show 
mWindow.setContentView(); 
mWindow.setBackgroundDrawable(); 
mWindow.setFocusable(false); 
... 

ajuste setFocusable a falsa ayudó a mi actividad de captura de onKeyDown() nuevo.

Cuestiones relacionadas