2017-02-27 34 views
0

我試圖使Xamarin的Android API 19 EthernetManager工作中使用其 getSavedConfig和updateDevInfo(EthernetDevInfo資訊)方法,如在這裏找到:如何在Xamarin Android API 19中使用EthernetManager?

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/

前2行的我的代碼,即系統服務和類被檢索到ethMn和e代碼段運行正常。然而第3行拋出一個異常,說:

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

這很奇怪,因爲這可以從我張貼的第一個鏈接可以看出,的getState()確實存在,並與簽名輸入。

我知道我缺少一些基本的東西,但無法弄清楚究竟是什麼。任何人都可以幫忙嗎?謝謝!

回答

0

取決於您的設備上的EthernetManager,如果有的話,還有很多變體,因爲這不是公共類。

但是你的簽名應該是()I

即:

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

或(getEthStategetState常見的變體)

m = JNIEnv.GetMethodID(e, "getEthState", "()I"); 
+0

對不起,沒有聲明的工作...... – zalenix

+0

@zalenix那麼你可能想使用一些Java和獲得您設備上''EthernetManager'類的版本中的'GetDeclaredMethods', – SushiHangover

相關問題