2011-12-20 4 views
26

私は現在、GPSアップデートを受け取るためにクラスにILocationListenerを実装しようとしています。これはアクティビティではなく通常のC#クラスです。MonoDroidでIJavaObjectを実装する

ILocationListener契約の一環として、私は私のJavaObjectをサポートする必要があります。

public IntPtr Handle 
    { 
     get { throw new NotImplementedException(); } 
    } 

私はこのために何をすべき?

また、C#クラスとJavaオブジェクトがMonoDroidでどのようにバインドされているかについて話し合う優れたドキュメントやブログ記事がありますか?これらのドキュメントを見つけることができれば、おそらく質問する必要はありませんこのように、私はうまくいけば、もっと良いコードを書くこともできます。

おかげ

答えて

54

やってるか知っているでしょう:

あなたがする必要があるかもしれない時間がありますがAndroid.Content.IComponentCallbacksなどのAndroidインターフェイスを実装します。すべてのAndroidクラスとインターフェイスはAndroid.Runtime.IJavaObjectインターフェイスを拡張しているので、問題が発生します.IJavaObjectを実装するにはどうすればよいですか?

上記の質問に答えました:すべてのAndroidタイプがIJavaObjectを実装する必要がある理由は、MonoDroidがAndroidに提供するAndroid呼び出し可能ラッパー、つまり指定されたタイプのJavaプロキシを持つためです。 monodroid.exeのみjava.lang.Objectのサブクラスを探し、java.lang.Object上位IJavaObjectを実装しているので、答えは明白です:サブクラスjava.lang.Objectの

は、基本的には常にjava.lang.Objectから継承する必要があります。 AndroidのMonoは呼び出し可能なラッパーを生成しないため、IJavaObjectを自分で実装することは実際には機能しません。

もし役に立ったら、ILocationListenerを実装した例があります。hereです。これはアクティビティで直接実装されますが、ActivityではなくJava.Lang.Objectから継承できます。

+2

まだ理解していない人にとっては、単に「public class locationManager:Java.Lang.Object、ILocationListener」という意味です。 –

2

は私がパズルの最初のピースを見つけた自分を考える - がjava.lang.Objectのが便利であると私はそれを使用することができますように思えます。

私はバインディング情報を探し続けます - うまくいけば、私はその後、私は:) Xamarin's docsから撮影

0

これは私のSeg Faultクラッシュ[mono-rt]を解決しました。ネイティブコードを実行している間にSIGSEGVを取得しました..... IJavaObjectを実装したクラスによって引き起こされた問題!