如何在Xamarin Android API 19中使用EthernetManager?

时间:2017-02-27 18:17:07

标签: xamarin xamarin.android

我正在尝试让EthernetManager在Xamarin Android API 19中运行以使用它 getSavedConfig和updateDevInfo(EthernetDevInfo info)方法,如下所示:

ftp://ftp1.digi.com/support/temp/digi-docs/reference/android/net/ethernet/ethernetmanager.html

为此,我使用反射:

Java.Lang.Object ethMn = GetSystemService("ethernet");
IntPtr eth0 = JNIEnv.FindClass("android/net/ethernet/EthernetManager");
IntPtr method = JNIEnv.GetMethodID(eth0, "getState", "(V)I");
IntPtr obj = JNIEnv.CallObjectMethod(ethMn.Handle, method);

使用上面的getState方法来简化调用。

这里有一个JNI示例: https://forums.xamarin.com/discussion/12117/how-to-get-class-method-by-reflection

以及此处的JNI参考:https://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/working_with_jni/

我的代码片段的前两行运行良好,即系统服务和类被检索到ethMn和e。然而,第3行引发了一个例外:

Java.Lang.NoSuchMethodError: no method with name='getState' signature='(V)I' in class Landroid/net/ethernet/EthernetManager;

这很奇怪,因为从我发布的第一个链接可以看出,getState()确实存在并且签名已经输入。

我知道我遗漏了一些基本的东西,但无法弄明白究竟是什么。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

取决于您设备上的EthernetManager,如果有一个,则有批次变体,因为这不是公共类。

但您的签名应为()I

即:

m = JNIEnv.GetMethodID(e, "getState", "()I");

或(getEthStategetState

的常见变体
m = JNIEnv.GetMethodID(e, "getEthState", "()I");