protected void _Call(string methodName, params object[] args) { if (args == null) { args = new object[1]; } string signature = AndroidJNIHelper.GetSignature(args); Debug.Warning("Call<void>" + methodName + signature + args); IntPtr cachedMethodID = AndroidJNIHelper.GetMethodID(this.m_jclass, methodName, args, false); jvalue[] args2 = AndroidJNIHelper.CreateJNIArgArray(args); AndroidJNI.CallVoidMethod(this.m_jobject, cachedMethodID, args2); }
protected ReturnType _Call <ReturnType>(string methodName, params object[] args) { if (args == null) { args = new object[1]; } string signature = AndroidJNIHelper.GetSignature <ReturnType>(args); Debug.Warning("Call<" + typeof(ReturnType).ToString() + ">" + methodName + signature + args); IntPtr cachedMethodID = AndroidJNIHelper.GetMethodID <ReturnType> (this.m_jclass, methodName, args, false); jvalue[] args2 = AndroidJNIHelper.CreateJNIArgArray(args); if (typeof(ReturnType).IsPrimitive) { if (typeof(ReturnType) == typeof(int)) { object rt = AndroidJNI.CallIntMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(bool)) { object rt = AndroidJNI.CallBooleanMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(byte)) { object rt = AndroidJNI.CallByteMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(short)) { object rt = AndroidJNI.CallShortMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(long)) { object rt = AndroidJNI.CallLongMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(float)) { object rt = AndroidJNI.CallFloatMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(double)) { object rt = AndroidJNI.CallDoubleMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(char)) { object rt = AndroidJNI.CallCharMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } } else { if (typeof(ReturnType) == typeof(string)) { object rt = AndroidJNI.CallStringMethod(this.m_jobject, cachedMethodID, args2); return((ReturnType)rt); } if (typeof(ReturnType) == typeof(AndroidJavaObject)) { IntPtr jobject = AndroidJNI.CallObjectMethod(this.m_jobject, cachedMethodID, args2); object rt = new AndroidJavaObject(jobject); return((ReturnType)rt); } // if (typeof(Array).IsAssignableFrom(typeof(ReturnType))) // { // IntPtr array = AndroidJNI.CallObjectMethod(this.m_jobject, cachedMethodID, args2); // return (ReturnType)AndroidJNIHelper.ConvertFromJNIArray<ReturnType>(array); // } Debug.Warning("JNI: Unknown return type '" + typeof(ReturnType) + "'"); } return(default(ReturnType)); }