1
Java開發人員爲了結束傳入呼叫而使用了反射來達到ITelephony的endcall方法,直到2.3,但此方法後來被阻止,因此無法通過monodroid中的c#訪問。如何結束Monodroid的來電?
有沒有辦法在'Mono For Android'中做到這一點?
Java開發人員爲了結束傳入呼叫而使用了反射來達到ITelephony的endcall方法,直到2.3,但此方法後來被阻止,因此無法通過monodroid中的c#訪問。如何結束Monodroid的來電?
有沒有辦法在'Mono For Android'中做到這一點?
Java開發人員曾使用反射
這是-同剛剛的不同:不是Java反射,你會使用JNIEnv。
假設你想將這個Java reflection-based code:
try {
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(manager.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephony = (ITelephony)m.invoke(manager);
telephony.endCall();
} catch(Exception e){
Log.d("",e.getMessage());
}
如果你眯着眼睛恰到好處,你可以得到這個(完全未經測試!)C#代碼:
var manager = (TelephonyManager) this.GetSystemService (Context.TelephonyService);
IntPtr TelephonyManager_getITelephony = JNIEnv.GetMethodID (
manager.Class.Handle,
"getITelephony",
"()Lcom/android/internal/telephony/ITelephony;");
IntPtr telephony = JNIEnv.CallObjectMethod (manager.Handle, TelephonyManager_getITelephony);
IntPtr ITelephony_class = JNIEnv.GetObjectClass (telephony);
IntPtr ITelephony_endCall = JNIEnv.GetMethodID (
ITelephony_class,
"endCall",
"()Z");
JNIEnv.CallBooleanMethod (telephony, ITelephony_endCall);
JNIEnv.DeleteLocalRef (telephony);
JNIEnv.DeleteLocalRef (ITelephony_class);
謝謝你,我最後在研究JNIEnv - 在問這個問題之後 - 但是我跳過了調用getITelephony的過程,當我看到你的答案時希望這就是爲什麼我不能訪問endCall ...不幸的是,它仍然給「沒有這樣的方法錯誤」endcall線......最好的問候。 –
我還添加了[ITelephony.java](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/com/android/internal/telephony /ITelephony.java)作爲AndroidJavaSource ...既沒有幫助也沒有幫助 –
哦好吧...得到它...問題是與類型引用。 endCall是()Z不(V)Z,我們也必須使用CallBooleanMethod ... –