在MonoDroid上实现IJavaObject

时间:2011-12-20 09:52:42

标签: xamarin.android

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

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

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

我该怎么做?

此外,是否有任何好的文档和/或博客文章讨论如何在MonoDroid中将C#类和Java对象绑定在一起 - 如果我能找到这些文档,那么我可能不需要像这个,我希望也能编写更好的代码。

由于

3 个答案:

答案 0 :(得分: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继承。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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