我正在为Android 2.3.3制作动态壁纸,它使用了Visualizer类。我已经有一个Visualizer程序的工作版本可以单独运行,但是当我将代码放入Live Wallpaper服务时,我的问题就开始了。以下代码是存在错误的位置:

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

这是一个很奇怪的部分,当我浏览动态壁纸列表时,我将其点击以查看预览,并且效果很好。在未将其设置为 Activity 墙纸的情况下,我按下了“后退”按钮,然后再次选择它,它崩溃了。我可以重复此过程,它只会每隔一段时间崩溃一次,而在其他时间都起作用。如果我选择将其设置为 Activity 墙纸,则每次都会崩溃。

最佳答案

at the source,如果状态不是IllegalStateException,似乎会抛出STATE_INITIALIZED

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

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

10-04 23:12