在 MonoDroid 上实现 IJavaObject

2024-01-24

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

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

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

为此我该怎么办?

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

Thanks


取自Xamarin 的文档 http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/android_callable_wrappers/:

有时您可能需要实现 Android 接口,例如 Android.Content.IComponentCallbacks。由于所有 Android 类和接口都扩展了 Android.Runtime.IJavaObject 接口,因此出现了问题:我们如何实现 IJavaObject?

上面已经回答了这个问题:所有 Android 类型都需要实现 IJavaObject 的原因是 MonoDroid 有一个 Android 可调用包装器提供给 Android,即给定类型的 Java 代理。由于 monodroid.exe 只查找 Java.Lang.Object 子类,而 Java.Lang.Object 实现了 IJavaObject,所以答案很明显:subclass Java.Lang.Object

基本上,在这些情况下,您应该始终从 Java.Lang.Object 继承,因为您自己实现 IJavaObject 实际上不会起作用,因为 Mono for Android 不会生成可调用包装器。

如果有帮助,我有一个实现 ILocationListener 的示例here https://github.com/gshackles/Sample-Projects/blob/master/MonoDroid/MonoDroidSamples/MonoDroidSamples/DemoActivities/LocationDemo/LocationActivity.cs。它直接在 Activity 上实现它,但您可以从 Java.Lang.Object 而不是 Activity 继承。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MonoDroid 上实现 IJavaObject 的相关文章

随机推荐