每隔一段时间,android.media.audiofx.Visualizer会抛出异常

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

这里有个奇怪的问题,当我浏览动态壁纸列表并点击查看预览时,一切正常。但如果不将其设置为活动壁纸,我点击返回按钮然后再次选择它,便会崩溃。我可以重复此过程,但只有每两次才会崩溃,另外的时间则正常工作。如果我选择将其设置为活动壁纸,那么每次都会崩溃。

1个回答

26

源代码来看,如果状态不是STATE_INITIALIZED,则会抛出IllegalStateException异常。

由于构造函数将状态设置为STATE_ENABLEDSTATE_INITIALIZED,因此当您收到异常时状态为STATE_ENABLED(唯一的选项)。

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


成功了!非常感谢。它说我还需要等6个小时才能授予赏金,但一旦可以,我就会这样做。 - Foggzie
1
很高兴听到这个消息。我以前从未使用过Visualizer,希望我的解决问题的方法在其他需要时也能为您服务。 - MByD
这帮助我解决了一个类似的屏幕方向错误!做得好,谢谢。 - kabuto178
非常有帮助。谢谢。 - Jigar
这几天一直在寻找这个答案,谢谢你! - Marcus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接