public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic) { IntPtr ptr3; IntPtr zero = IntPtr.Zero; try { zero = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic); ptr3 = AndroidJNISafe.FromReflectedMethod(zero); } catch (Exception exception) { IntPtr ptr2 = !isStatic?AndroidJNISafe.GetMethodID(jclass, methodName, signature) : AndroidJNISafe.GetStaticMethodID(jclass, methodName, signature); if (ptr2 == IntPtr.Zero) { throw exception; } return(ptr2); } finally { AndroidJNISafe.DeleteLocalRef(zero); } return(ptr3); }
public static IntPtr NewProxyInstance(int delegateHandle, IntPtr interfaze) { jvalue[] array = new jvalue[2]; array[0].i = delegateHandle; array[1].l = interfaze; return(AndroidJNISafe.CallStaticObjectMethod(s_ReflectionHelperClass, s_ReflectionHelperNewProxyInstance, array)); }
private void _AndroidJavaObject(string className, params object[] args) { this.DebugPrint("Creating AndroidJavaObject from " + className); bool flag = args == null; if (flag) { args = new object[1]; } IntPtr jobject = AndroidJNISafe.FindClass(className.Replace('.', '/')); this.m_jclass = new GlobalJavaObjectRef(jobject); jvalue[] array = AndroidJNIHelper.CreateJNIArgArray(args); try { IntPtr constructorID = AndroidJNIHelper.GetConstructorID(this.m_jclass, args); IntPtr intPtr = AndroidJNISafe.NewObject(this.m_jclass, constructorID, array); this.m_jobject = new GlobalJavaObjectRef(intPtr); AndroidJNISafe.DeleteLocalRef(intPtr); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, array); } }
public static IntPtr GetConstructorID(IntPtr jclass, string signature) { IntPtr ptr3; IntPtr zero = IntPtr.Zero; try { zero = AndroidReflection.GetConstructorMember(jclass, signature); ptr3 = AndroidJNISafe.FromReflectedMethod(zero); } catch (Exception exception) { IntPtr ptr2 = AndroidJNISafe.GetMethodID(jclass, "<init>", signature); if (ptr2 == IntPtr.Zero) { throw exception; } return(ptr2); } finally { AndroidJNISafe.DeleteLocalRef(zero); } return(ptr3); }
public static void CheckException() { IntPtr jthrowable = AndroidJNI.ExceptionOccurred(); if (jthrowable != IntPtr.Zero) { AndroidJNI.ExceptionClear(); IntPtr jthrowableClass = AndroidJNI.FindClass("java/lang/Throwable"); IntPtr androidUtilLogClass = AndroidJNI.FindClass("android/util/Log"); try { IntPtr toStringMethodId = AndroidJNI.GetMethodID(jthrowableClass, "toString", "()Ljava/lang/String;"); IntPtr getStackTraceStringMethodId = AndroidJNI.GetStaticMethodID(androidUtilLogClass, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;"); string exceptionMessage = AndroidJNI.CallStringMethod(jthrowable, toStringMethodId, new jvalue[] {}); // Pass jthrowable as a param to getStackTraceString() jvalue[] jniArgs = new jvalue[1]; jniArgs[0].l = jthrowable; string exceptionCallStack = AndroidJNI.CallStaticStringMethod(androidUtilLogClass, getStackTraceStringMethodId, jniArgs); throw new AndroidJavaException(exceptionMessage, exceptionCallStack); } finally { AndroidJNISafe.DeleteLocalRef(jthrowable); AndroidJNISafe.DeleteLocalRef(jthrowableClass); AndroidJNISafe.DeleteLocalRef(androidUtilLogClass); } } }
public static IntPtr GetFieldID(IntPtr jclass, string fieldName, string signature, bool isStatic) { IntPtr intPtr = IntPtr.Zero; IntPtr result; try { intPtr = AndroidReflection.GetFieldMember(jclass, fieldName, signature, isStatic); result = AndroidJNISafe.FromReflectedField(intPtr); } catch (Exception ex) { IntPtr intPtr2 = (!isStatic) ? AndroidJNISafe.GetFieldID(jclass, fieldName, signature) : AndroidJNISafe.GetStaticFieldID(jclass, fieldName, signature); if (!(intPtr2 != IntPtr.Zero)) { throw ex; } result = intPtr2; } finally { AndroidJNISafe.DeleteLocalRef(intPtr); } return(result); }
public static IntPtr GetConstructorID(IntPtr jclass, string signature) { IntPtr intPtr = IntPtr.Zero; IntPtr result; try { intPtr = AndroidReflection.GetConstructorMember(jclass, signature); result = AndroidJNISafe.FromReflectedMethod(intPtr); } catch (Exception ex) { IntPtr methodID = AndroidJNISafe.GetMethodID(jclass, "<init>", signature); if (!(methodID != IntPtr.Zero)) { throw ex; } result = methodID; } finally { AndroidJNISafe.DeleteLocalRef(intPtr); } return(result); }
public static IntPtr InvokeJavaProxyMethod(AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs) { int num = 0; if (jargs != IntPtr.Zero) { num = AndroidJNISafe.GetArrayLength(jargs); } AndroidJavaObject[] array = new AndroidJavaObject[num]; for (int i = 0; i < num; i++) { IntPtr objectArrayElement = AndroidJNISafe.GetObjectArrayElement(jargs, i); array[i] = ((!(objectArrayElement != IntPtr.Zero)) ? null : new AndroidJavaObject(objectArrayElement)); } IntPtr result; using (AndroidJavaObject androidJavaObject = proxy.Invoke(AndroidJNI.GetStringUTFChars(jmethodName), array)) { if (androidJavaObject == null) { result = IntPtr.Zero; } else { result = AndroidJNI.NewLocalRef(androidJavaObject.GetRawObject()); } } return(result); }
public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic) { IntPtr intPtr = IntPtr.Zero; IntPtr result; try { intPtr = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic); result = AndroidJNISafe.FromReflectedMethod(intPtr); } catch (Exception ex) { IntPtr methodIDFallback = _AndroidJNIHelper.GetMethodIDFallback(jclass, methodName, signature, isStatic); if (!(methodIDFallback != IntPtr.Zero)) { throw ex; } result = methodIDFallback; } finally { AndroidJNISafe.DeleteLocalRef(intPtr); } return(result); }
private void _AndroidJavaClass(string className) { base.DebugPrint("Creating AndroidJavaClass from " + className); IntPtr jobject = AndroidJNISafe.FindClass(className.Replace('.', '/')); this.m_jclass = new GlobalJavaObjectRef(jobject); this.m_jobject = new GlobalJavaObjectRef(IntPtr.Zero); }
public static void SetNativeExceptionOnProxy(IntPtr proxy, Exception e, bool methodNotFound) { jvalue[] array = new jvalue[3]; array[0].l = proxy; array[1].j = GCHandle.ToIntPtr(GCHandle.Alloc(e)).ToInt64(); array[2].z = methodNotFound; AndroidJNISafe.CallStaticVoidMethod(AndroidReflection.s_ReflectionHelperClass, AndroidReflection.s_ReflectionHelperSetNativeExceptionOnProxy, array); }
protected FieldType _Get <FieldType>(string fieldName) { IntPtr fieldId = AndroidJNIHelper.GetFieldID <FieldType>(this.m_jclass, fieldName, false); if (AndroidReflection.IsPrimitive(typeof(FieldType))) { if (typeof(FieldType) == typeof(int)) { return((FieldType)(ValueType)AndroidJNISafe.GetIntField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(bool)) { return((FieldType)(ValueType)AndroidJNISafe.GetBooleanField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(byte)) { return((FieldType)(ValueType)AndroidJNISafe.GetByteField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(short)) { return((FieldType)(ValueType)AndroidJNISafe.GetShortField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(long)) { return((FieldType)(ValueType)AndroidJNISafe.GetLongField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(float)) { return((FieldType)(ValueType)AndroidJNISafe.GetFloatField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(double)) { return((FieldType)(ValueType)AndroidJNISafe.GetDoubleField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(char)) { return((FieldType)(ValueType)AndroidJNISafe.GetCharField(this.m_jobject, fieldId)); } return(default(FieldType)); } if (typeof(FieldType) == typeof(string)) { return((FieldType)AndroidJNISafe.GetStringField(this.m_jobject, fieldId)); } if (typeof(FieldType) == typeof(AndroidJavaClass)) { return((FieldType)AndroidJavaObject.AndroidJavaClassDeleteLocalRef(AndroidJNISafe.GetObjectField(this.m_jobject, fieldId))); } if (typeof(FieldType) == typeof(AndroidJavaObject)) { return((FieldType)AndroidJavaObject.AndroidJavaObjectDeleteLocalRef(AndroidJNISafe.GetObjectField(this.m_jobject, fieldId))); } if (AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType))) { return(AndroidJNIHelper.ConvertFromJNIArray <FieldType>(AndroidJNISafe.GetObjectField(this.m_jobject, fieldId))); } throw new Exception("JNI: Unknown field type '" + (object)typeof(FieldType) + "'"); }
protected FieldType _GetStatic <FieldType>(string fieldName) { IntPtr fieldID = AndroidJNIHelper.GetFieldID <FieldType>(this.m_jclass, fieldName, true); if (AndroidReflection.IsPrimitive(typeof(FieldType))) { if (typeof(FieldType) == typeof(int)) { return((FieldType)AndroidJNISafe.GetStaticIntField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(bool)) { return((FieldType)AndroidJNISafe.GetStaticBooleanField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(byte)) { return((FieldType)AndroidJNISafe.GetStaticByteField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(short)) { return((FieldType)AndroidJNISafe.GetStaticShortField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(long)) { return((FieldType)AndroidJNISafe.GetStaticLongField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(float)) { return((FieldType)AndroidJNISafe.GetStaticFloatField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(double)) { return((FieldType)AndroidJNISafe.GetStaticDoubleField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(char)) { return((FieldType)AndroidJNISafe.GetStaticCharField(this.m_jclass, fieldID)); } return(default(FieldType)); } if (typeof(FieldType) == typeof(string)) { return((FieldType)AndroidJNISafe.GetStaticStringField(this.m_jclass, fieldID)); } if (typeof(FieldType) == typeof(AndroidJavaClass)) { return((FieldType)AndroidJavaClassDeleteLocalRef(AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID))); } if (typeof(FieldType) == typeof(AndroidJavaObject)) { return((FieldType)AndroidJavaObjectDeleteLocalRef(AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID))); } if (!AndroidReflection.IsAssignableFrom(typeof(Array), typeof(FieldType))) { throw new Exception("JNI: Unknown field type '" + typeof(FieldType) + "'"); } return(AndroidJNIHelper.ConvertFromJNIArray <FieldType>(AndroidJNISafe.GetStaticObjectField(this.m_jclass, fieldID))); }
protected virtual void Dispose(bool disposing) { if (!this.m_disposed) { this.m_disposed = true; AndroidJNISafe.DeleteGlobalRef(this.m_jobject); AndroidJNISafe.DeleteGlobalRef(this.m_jclass); } }
public static int GetIntField(IntPtr obj, IntPtr fieldID) { try { return(AndroidJNI.GetIntField(obj, fieldID)); } finally { AndroidJNISafe.CheckException(); } }
private static IntPtr GetMethodIDFallback(IntPtr jclass, string methodName, string signature, bool isStatic) { try { return((!isStatic) ? AndroidJNISafe.GetMethodID(jclass, methodName, signature) : AndroidJNISafe.GetStaticMethodID(jclass, methodName, signature)); } catch (Exception) { } return(IntPtr.Zero); }
public static int GetStaticIntField(IntPtr clazz, IntPtr fieldID) { try { return(AndroidJNI.GetStaticIntField(clazz, fieldID)); } finally { AndroidJNISafe.CheckException(); } }
public static void SetIntField(IntPtr obj, IntPtr fieldID, int val) { try { AndroidJNI.SetIntField(obj, fieldID, val); } finally { AndroidJNISafe.CheckException(); } }
public static void CallVoidMethod(IntPtr obj, IntPtr methodID, jvalue[] args) { try { AndroidJNI.CallVoidMethod(obj, methodID, args); } finally { AndroidJNISafe.CheckException(); } }
internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass) { try { return(new AndroidJavaClass(jclass)); } finally { AndroidJNISafe.DeleteLocalRef(jclass); } }
public static void SetStaticIntField(IntPtr clazz, IntPtr fieldID, int val) { try { AndroidJNI.SetStaticIntField(clazz, fieldID, val); } finally { AndroidJNISafe.CheckException(); } }
public static bool CallStaticBooleanMethod(IntPtr clazz, IntPtr methodID, jvalue[] args) { try { return(AndroidJNI.CallStaticBooleanMethod(clazz, methodID, args)); } finally { AndroidJNISafe.CheckException(); } }
internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject) { try { return(new AndroidJavaObject(jobject)); } finally { AndroidJNISafe.DeleteLocalRef(jobject); } }
public static double[] FromDoubleArray(IntPtr array) { try { return(AndroidJNI.FromDoubleArray(array)); } finally { AndroidJNISafe.CheckException(); } }
public static short[] FromShortArray(IntPtr array) { try { return(AndroidJNI.FromShortArray(array)); } finally { AndroidJNISafe.CheckException(); } }
public static IntPtr GetStaticMethodID(IntPtr clazz, string name, string sig) { try { return(AndroidJNI.GetStaticMethodID(clazz, name, sig)); } finally { AndroidJNISafe.CheckException(); } }
public static int CallIntMethod(IntPtr obj, IntPtr methodID, jvalue[] args) { try { return(AndroidJNI.CallIntMethod(obj, methodID, args)); } finally { AndroidJNISafe.CheckException(); } }
public static IntPtr GetObjectClass(IntPtr ptr) { try { return(AndroidJNI.GetObjectClass(ptr)); } finally { AndroidJNISafe.CheckException(); } }
public static IntPtr NewStringUTF(string bytes) { try { return(AndroidJNI.NewStringUTF(bytes)); } finally { AndroidJNISafe.CheckException(); } }
public static string GetStringUTFChars(IntPtr str) { try { return(AndroidJNI.GetStringUTFChars(str)); } finally { AndroidJNISafe.CheckException(); } }