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); }
这是奇怪的部分,当我浏览动态壁纸列表时,我会点击它来查看预览,它工作正常.如果不将其设置为活动壁纸,我会点击后退按钮,然后再次选择它并崩溃.我可以重复这个过程,它只会在其他时间崩溃并且在其他时间起作用.如果我选择将其设置为活动壁纸,则每次都会崩溃.
,如果状态不是STATE_INITIALIZED,则会抛出IllegalStateException.
由于构造函数将状态设置为STATE_ENABLED或STATE_INITIALIZED,这意味着获得异常时的状态为STATE_ENABLED(唯一选项).
在setCaptureSize()的文档中,他们提到在状态为STATE_ENABLED时不应该调用此方法,所以我认为在调用setCaptureSize()之前需要在Visualizer对象上调用setEnabled(false)
翻译自:https://stackoverflow.com/questions/9222219/android-media-audiofx-visualizer-throwing-exception-every-other-time