我遇到错误:
public class VisualizerCapture extends Activity implements Visualizer.OnDataCaptureListener {
private Visualizer mVisualizer = new Visualizer(0); // error is here!!!
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setupVisualizer();
}
这是抛出的错误:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{bla bla}: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4
我的清单:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
设置方法:
private void setupVisualizer() {
Visualizer.setEnabled(false);
Visualizer.setCaptureSize(1); //test
Visualizer.setDataCaptureListener(this,250,false,true);
//Visualizer.setScalingMode(visualizer.SCALING_MODE_AS_PLAYED);
Visualizer.setEnabled(true);
Log.v("ABS","setupVisualizer" + Visualizer.getEnabled()); //log
}
为什么我收到此错误?好像我已经获得了所有权限?
请耐心等待,我是开发新手。我该如何解决这个问题?
答案 0 :(得分:1)
阅读文档后:
public Visualizer (int audioSession)
Added in API level 9
Class constructor.
Parameters
audioSession system wide unique audio session identifier. If audioSession is not 0, the visualizer will be attached to the MediaPlayer or AudioTrack in the same audio session. Otherwise, the Visualizer will apply to the output mix.
你确定要0吗?
进一步研究错误:
public static final int ERROR_BAD_VALUE
Added in API level 9
Operation failed due to bad parameter value.
Constant Value: -4 (0xfffffffc)
这是你得到的错误,你可能在Visualizer的配置中有些不好,请仔细检查setupVisualizer方法中的内容。
答案 1 :(得分:0)
您无法让Visualizer在所有平台上运行。它是Android中测试最少的对象之一,不应该已经发布imho。无论您何时触摸它,都绝对需要捕获异常。
Visualizer很可能是您将使用的最复杂和未记录的类之一。它具有DSP和FFT怪异以及晦涩的错误处理。
EG。在使用Visualizer时,您应始终实例化均衡器,以绕过音量控制。
您永远不应该在类的声明部分中实例化对象依赖项。这使得难以捕获异常,并且还使依赖注入变得困难。
您应该在类的构造函数或init方法中实例化对象,以便您可以捕获异常并支持测试模拟以实现依赖项注入。
答案 2 :(得分:0)
在清单文件中添加权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
如果添加,请检查,
为此应用转到AppInfo;导航到权限;确保已授予此应用已请求的所有权限。