9

Android 2.3.3 用のライブ壁紙を作成していますが、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);
}

ここが奇妙な部分です。ライブ壁紙のリストを調べているときに、それをタップしてプレビューを表示すると、問題なく動作します。アクティブな壁紙として設定せずに、戻るボタンを押してからもう一度選択すると、クラッシュします。このプロセスを繰り返すことができますが、1 回おきにクラッシュするだけで、それ以外の場合は機能します。アクティブな壁紙として設定すると、毎回クラッシュします。

4

1 に答える 1

24

ソースを見るとIllegalStateException、状態がそうでない場合にスローされるようですSTATE_INITIALIZED

コンストラクターは状態をSTATE_ENABLEDorSTATE_INITIALIZEDに設定するため、例外を取得したときの状態はSTATE_ENABLED(唯一のオプション) であることを意味します。

彼らのドキュメントでsetCaptureSize()は、状態が である間はこのメソッドを呼び出すべきではないと述べているため、呼び出す前に Visualizer オブジェクトSTATE_ENABLEDを呼び出す必要があると思いますsetEnabled(false)setCaptureSize()

于 2012-02-14T15:24:56.060 に答える