7

我正在爲Android 2.3.3製作動態壁紙,並使用Visualizer類。我已經有一個工作版本的Visualizer程序作爲獨立工作,但是當我將代碼放入Live Wallpaper服務時,我的問題就開始了。下面的代碼是其中存在錯誤:android.media.audiofx.Visualizer每隔一段時間拋出異常

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

這裏的怪異的一部分,當我在尋找通過現場壁紙列表中,我會點擊它來查看預覽,它工作正常。沒有將它設置爲活動壁紙,我點擊後退按鈕,然後再次選擇它並崩潰。我可以重複這個過程,它只會在其他時間崩潰並在其他時間工作。如果我選擇將其設置爲活動牆紙,則每次都會崩潰。

回答

21

展望at the source,好像IllegalStateException是拋出如果狀態不是STATE_INITIALIZED

由於構造函數將狀態設置爲STATE_ENABLEDSTATE_INITIALIZED,這意味着獲取異常時的狀態爲STATE_ENABLED(唯一選項)。

setCaptureSize()他們提到,雖然國家是STATE_ENABLED你不應該調用此方法的文檔,所以我認爲你需要調用setCaptureSize()

+0

這工作之前調用展示臺對象setEnabled(false)!非常感謝。它說我不能獎勵另外6個小時的獎金,但我會盡我所能。 – Foggzie 2012-02-14 17:18:18

+1

我很高興聽到。我之前從未與Visualizer合作過,我希望我的方法能夠在需要的其他時候爲您找到問題。 – MByD 2012-02-14 17:19:58

+0

這幫助我解決了屏幕方向的類似錯誤!非常感謝。 – kabuto178 2013-06-01 19:11:06