7

Estoy haciendo un Live Wallpaper para Android 2.3.3 y usaba la clase Visualizer. Ya tengo una versión funcional de mi programa Visualizer funcionando como independiente, pero cuando coloco el código en un servicio de Live Wallpaper, mi problema comienza. El siguiente código es donde existe el error:android.media.audiofx.Visualizer throwing exception every other time

// Called in my Engine extension's constructor 
public void setupVisualizer() 
{ 
    mBytes = null; 
    mVisualizer = new Visualizer(0); 

    // EDIT 
    mVisualizer.setEnabled(false); // This fixes the issue 
    // END EDIT 

    mVisualizer.setCaptureSize(
     Visualizer.getCaptureSizeRange()[1]); // IllegalStateException Thrown 

    mVisualizer.setDataCaptureListener() { 
     public void onWaveFormDataCapture(Visualizer visualizer, 
      byte[] bytes, int samplingRate) { 
       updateVisualizer(bytes); 
      } 
     public void onFftDataCapture(Visualizer visualizer, 
      bytes[] bytes, int samplingRate) {} 
     }, Visualizer.getMaxCaptureRate()/2, true, false); 

    mVisualizer.setEnabled(true); 
} 

Aquí está la parte extraña, cuando estoy mirando a través de la lista de pantalla en vivo, te toque en él para ver la vista previa y funciona bien. Sin configurarlo como fondo de pantalla activo, presiono el botón Atrás y luego lo selecciono nuevamente y se cuelga. Puedo repetir este proceso y solo se bloquea cada dos por tres y funciona el resto del tiempo. Si elijo establecerlo como fondo de pantalla activo, se bloquea cada vez.

Respuesta

21

Buscando at the source, parece que IllegalStateException se emite si el estado no es STATE_INITIALIZED.

Dado que el constructor establece el estado en STATE_ENABLED o STATE_INITIALIZED, significa que el estado en el que se obtiene la excepción es STATE_ENABLED (la única opción).

En la documentación de setCaptureSize() mencionan que no debe llamar a este método, mientras que el estado es STATE_ENABLED, así que creo que es necesario llamar a setEnabled(false) en el objeto visualizador antes de llamar setCaptureSize()

+0

Eso funcionó! Muchas gracias. Dice que no puedo otorgar la recompensa por otras 6 horas, pero lo haré una vez que pueda. – Foggzie

+1

Me alegra oírlo. Nunca antes había trabajado con Visualizer, y espero que mi método para encontrar el problema te sirva en otros momentos de necesidad. – MByD

+0

¡Esto me ayudó a corregir un error similar que estaba teniendo con la orientación de la pantalla! Buen trabajo gracias. – kabuto178