9

我正在为 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);
}

这是奇怪的部分,当我浏览动态壁纸列表时,我会点击它来查看预览,它工作正常。没有将其设置为活动壁纸,我点击后退按钮,然后再次选择它并崩溃。我可以重复这个过程,它只会每隔一次崩溃一次,其他时间就会工作。如果我选择将其设置为活动壁纸,它每次都会崩溃。

4

1 回答 1

24

源码,好像IllegalStateException是被抛出的状态不是STATE_INITIALIZED

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

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

于 2012-02-14T15:24:56.060 回答