7

Tworzę Live Wallpaper dla systemu Android 2.3.3 i używałem klasy Visualizer. Mam już działającą wersję mojego programu Visualizer działającego samodzielnie, ale kiedy umieszczam kod w usłudze Live Wallpaper, mój problem zaczyna się. Poniższy kod jest tam, gdzie występuje błąd:android.media.audiofx.Visualizer rzuca wyjątek co drugi raz

// 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); 
} 

Oto dziwne część, kiedy szukam listę tapety na żywo, będę dotknij go, aby wyświetlić podgląd i działa dobrze. Bez ustawiania go jako aktywnej tapety, wciskam przycisk powrotu, a następnie wybieram go ponownie i ulega awarii. Mogę powtórzyć ten proces i to tylko się zdarza co drugi raz i działa w innych czasach. Jeśli zdecyduję się ustawić jako aktywną tapetę, to za każdym razem ulega awarii.

Odpowiedz

21

Patrząc na at the source, wydaje się, że IllegalStateException jest wyrzucane, jeśli stan nie jest STATE_INITIALIZED.

Ponieważ konstruktor ustawia stan na STATE_ENABLED lub STATE_INITIALIZED, oznacza to, że stan, w którym występuje wyjątek, to STATE_ENABLED (jedyna opcja).

W dokumentacji setCaptureSize() wspominają, że nie należy wywołać tę metodę, gdy państwo jest STATE_ENABLED, więc myślę, że trzeba zadzwonić setEnabled(false) na obiekcie Visualizer przed wywołaniem setCaptureSize()

+0

To działa! Dziękuję bardzo. Mówi, że nie mogę przyznać nagrody za kolejne 6 godzin, ale kiedyś będę mógł. – Foggzie

+1

Miło mi słyszeć. Nigdy wcześniej nie współpracowałem z Visualizerem i mam nadzieję, że moja metoda znalezienia tego problemu będzie ci służyć w innych potrzebach. – MByD

+0

Pomogło mi to naprawić podobny błąd jaki miałem przy orientacji ekranu! Świetna robota dzięki. – kabuto178