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

Posted

技术标签:

【中文标题】android.media.audiofx.Visualizer 每隔一段时间就会抛出异常【英文标题】:android.media.audiofx.Visualizer throwing exception every other time 【发布时间】:2012-03-02 14:15:25 【问题描述】:

我正在为 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】:

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

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

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

【讨论】:

成功了!太感谢了。它说我不能再奖励 6 个小时的赏金,但我会的。 我很高兴听到。我以前从未使用过 Visualizer,希望我发现问题的方法能在其他需要时为您服务。 这帮助我解决了我在屏幕方向上遇到的类似错误!干得好,谢谢。 这真的很有帮助。谢谢你>>> 这几天一直在寻找这个答案,谢谢!

以上是关于android.media.audiofx.Visualizer 每隔一段时间就会抛出异常的主要内容,如果未能解决你的问题,请参考以下文章