2017-03-06 60 views
2

基于the answer of this questionthis example我已经使用Xamarin实现了VisualizerXamarin Android Visualizer SetDataCaptureListener引发InvalidCastException

myVisualizer = new Visualizer(0); 
myVisualizer.SetEnabled(false); 
myVisualizer.SetCaptureSize(Visualizer.GetCaptureSizeRange()[1]); 
myVisualizer.SetDataCaptureListener(new VisualizerCapturer(), Visualizer.MaxCaptureRate, true, false); 

代码工作,直到我打电话myVisualizer.SetDataCaptureListener(...)和异常

System.Reflection.TargetInvocationException:异常已通过调用的目标引发异常 。 ---> System.InvalidCastException: 指定的转换无效。在 Android.Media.Audiofx.Visualizer.SetDataCaptureListener (Android.Media.Audiofx.Visualizer + IOnDataCaptureListener听者, System.Int32率,System.Boolean波形,System.Boolean FFT) [0x0000b]在 /用户/助洗剂/data/lanes/4009/9578cdcd/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Android.Media.Audiofx.Visualizer.cs:811

被抛出。我IOnDataCaptureListener实施是没有任何代码(我做的方法中断点,异常被抛出之前没有方法被调用)

public class VisualizerCapturer : Visualizer.IOnDataCaptureListener 
{ 
    public IntPtr Handle 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public void Dispose() 
    { 
     throw new NotImplementedException(); 
    } 

    public void OnFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) 
    { 
     throw new NotImplementedException(); 
    } 

    public void OnWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) 
    { 
     throw new NotImplementedException(); 
    } 
} 

我完全不知道什么我的问题,我希望有人能帮助我我的问题。

回答

3

你实现Visualizer.IOnDataCaptureListener不从Java.Lang.Object继承因此是一个普通的C#类,而不是一个Android可调用包装(ACW)基于类的,因此您的VisualizerCapturer对象是无效的C#和Java运行时之间传递。

继承你VisualizerCapturerJava.Lang.Object贯彻Visualizer.IOnDataCaptureListener方法,你将被罚款:

public class VisualizerCapturer : Java.Lang.Object, Visualizer.IOnDataCaptureListener 
{ 
~~~~ 
} 
+0

完美的答案,就像魅力,非常感谢! – Fruchtzwerg

+0

@Fruchtzwerg很高兴我能帮忙,快乐的Xam'ie编码 – SushiHangover

相关问题