首页 文章

在MonoDroid上实现IJavaObject

提问于
浏览
28

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

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

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

我该怎么办?

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

谢谢

3 回答

  • 55

    取自Xamarin's docs

    有时您可能需要实现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的示例here . 它直接在活动上实现它,但您可以从Java.Lang.Object而不是Activity继承 .

  • 0

    我想我自己找到了第一块拼图 - 似乎有一个方便的Java.Lang.Object,我可以使用它 .

    我将继续寻找绑定信息 - 希望我会知道我在做什么:)

  • 2

    这也解决了我的Seg Fault崩溃[mono-rt]在执行本机代码时得到了一个SIGSEGV .....由一个实现IJavaObject的类引起的问题!

相关问题