【问题标题】:Implementing IJavaObject on MonoDroid在 MonoDroid 上实现 IJavaObject
【发布时间】:2015-08-21 21:11:01
【问题描述】:

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

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

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

我该怎么办?

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

谢谢

【问题讨论】:

    标签: xamarin.android


    【解决方案1】:

    取自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。它直接在 Activity 上实现它,但您可以从 Java.Lang.Object 继承而不是 Activity。

    【讨论】:

    • 对于那些还不明白的人来说,他的意思是:“public class locationManager : Java.Lang.Object, ILocationListener”
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这也解决了我的 Seg Fault crash [mono-rt] Got a SIGSEGV while execution native code..... 由实现 IJavaObject 的类引起的问题!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多