7

私はAndroid 2.3.3用のライブ壁紙を作っており、Visualizerクラスを使用していました。私は既にビジュアライザープログラムのスタンドアロンとして働いていますが、私はライブ壁紙サービスにコードを配置すると、私の問題が始まります。次のコードは、エラーが存在する場所さ: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と表示されている場合、状態がSTATE_INITIALIZEDでない場合はIllegalStateExceptionがスローされたようです。

コンストラクタは状態をSTATE_ENABLEDまたはSTATE_INITIALIZEDに設定するため、例外が発生したときの状態はSTATE_ENABLED(唯一のオプション)です。彼らは状態がSTATE_ENABLEDているときに、このメソッドを呼び出してはならないことは言うので、私はあなたが働いsetCaptureSize()

+0

を呼び出す前に、ビジュアライザオブジェクトにsetEnabled(false)を呼び出すために必要だと思うsetCaptureSize()のドキュメントで

!どうもありがとうございます。私はもう6時間賞金を授与することはできないと言いますが、私はできるだけ早く賞金を獲得します。 – Foggzie

+1

私は聞いてうれしいです。以前はVisualizerで作業したことがありませんでした。問題を見つける方法が必要なときに役立つことを願っています。 – MByD

+0

これは私が画面の向きに似たエラーを修正するのに役立ちました!素晴らしい仕事のおかげです。 – kabuto178

関連する問題