在MonoDroid上实现IJavaObject

Stu*_*art 28 xamarin.android

我目前正在尝试在类上实现ILocationListener以接收GPS更新 - 这不是一个Activity,只是一个普通的C#类.

作为ILocationListener合同的一部分,我需要支持I JavaObject:

    public IntPtr Handle
    {
        get { throw new NotImplementedException(); }
    }
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

另外,有没有好的文档和/或博客文章讨论如何在MonoDroid中绑定C#类和Java对象 - 如果我能找到这些文档,那么我可能不需要问这样的问题和我我们希望也能写出更好的代码.

谢谢

Gre*_*les 55

取自Xamarin的文档:

有时您可能需要实现Android界面,例如Android.Content.IComponentCallbacks.由于所有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,因为实现IJavaObject本身并不会真正起作用,因为Android的Mono不会生成可调用的包装器.

如果它有帮助,我在这里有一个实现ILocationListener的例子.它直接在活动上实现它,但您可以从Java.Lang.Object而不是Activity继承.

  • 对于仍然不理解的人,他只是意味着:"public class locationManager:Java.Lang.Object,ILocationListener" (3认同)