android.media.audiofx.Visualizer每隔一次抛出异常

时间:2012-02-10 03:15:32

标签: java android live-wallpaper illegalstateexception visualizer

我正在为Android 2.3.3制作动态壁纸,它使用了Visualizer类。我已经有一个可用的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 个答案:

答案 0 :(得分:23)

查看at the source,如果状态不是IllegalStateException,则会显示STATE_INITIALIZED

由于构造函数将状态设置为STATE_ENABLEDSTATE_INITIALIZED,这意味着获得异常时的状态为STATE_ENABLED(唯一选项)。

setCaptureSize()的文档中,他们提到在状态为STATE_ENABLED时不应该调用此方法,所以我认为在调用{之前需要在Visualizer对象上调用setEnabled(false) {1}}