我正在尝试让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
我的代码片段的前两行运行良好,即系统服务和类被检索到ethMn和e。然而,第3行引发了一个例外:
Java.Lang.NoSuchMethodError: no method with name='getState' signature='(V)I' in class Landroid/net/ethernet/EthernetManager;
这很奇怪,因为从我发布的第一个链接可以看出,getState()确实存在并且签名已经输入。
我知道我遗漏了一些基本的东西,但无法弄明白究竟是什么。有人可以帮忙吗?谢谢!
答案 0 :(得分:0)
取决于您设备上的EthernetManager
,如果有一个,则有批次变体,因为这不是公共类。
但您的签名应为()I
。
即:
m = JNIEnv.GetMethodID(e, "getState", "()I");
或(getEthState
是getState
)
m = JNIEnv.GetMethodID(e, "getEthState", "()I");