2017-03-06 59 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

相關問題