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 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 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); }
public static void CheckException() { IntPtr intPtr = AndroidJNI.ExceptionOccurred(); bool flag = intPtr != IntPtr.Zero; if (flag) { AndroidJNI.ExceptionClear(); IntPtr intPtr2 = AndroidJNI.FindClass("java/lang/Throwable"); IntPtr intPtr3 = AndroidJNI.FindClass("android/util/Log"); try { IntPtr methodID = AndroidJNI.GetMethodID(intPtr2, "toString", "()Ljava/lang/String;"); IntPtr staticMethodID = AndroidJNI.GetStaticMethodID(intPtr3, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;"); string message = AndroidJNI.CallStringMethod(intPtr, methodID, new jvalue[0]); jvalue[] array = new jvalue[1]; array[0].l = intPtr; string javaStackTrace = AndroidJNI.CallStaticStringMethod(intPtr3, staticMethodID, array); throw new AndroidJavaException(message, javaStackTrace); } finally { AndroidJNISafe.DeleteLocalRef(intPtr); AndroidJNISafe.DeleteLocalRef(intPtr2); AndroidJNISafe.DeleteLocalRef(intPtr3); } } }
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 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 void CheckException() { IntPtr localref = AndroidJNI.ExceptionOccurred(); if (!(localref != IntPtr.Zero)) { return; } AndroidJNI.ExceptionClear(); IntPtr num1 = AndroidJNI.FindClass("java/lang/Throwable"); IntPtr num2 = AndroidJNI.FindClass("android/util/Log"); try { IntPtr methodId = AndroidJNI.GetMethodID(num1, "toString", "()Ljava/lang/String;"); IntPtr staticMethodId = AndroidJNI.GetStaticMethodID(num2, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;"); string message = AndroidJNI.CallStringMethod(localref, methodId, new jvalue[0]); jvalue[] args = new jvalue[1]; args[0].l = localref; string javaStackTrace = AndroidJNI.CallStaticStringMethod(num2, staticMethodId, args); throw new AndroidJavaException(message, javaStackTrace); } finally { AndroidJNISafe.DeleteLocalRef(localref); AndroidJNISafe.DeleteLocalRef(num1); AndroidJNISafe.DeleteLocalRef(num2); } }
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); } }
internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass) { try { return(new AndroidJavaClass(jclass)); } finally { AndroidJNISafe.DeleteLocalRef(jclass); } }
internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject) { try { return(new AndroidJavaObject(jobject)); } finally { AndroidJNISafe.DeleteLocalRef(jobject); } }
internal AndroidJavaObject(IntPtr jobject) : this() { if (jobject == IntPtr.Zero) { throw new Exception("JNI: Init'd AndroidJavaObject with null ptr!"); } IntPtr objectClass = AndroidJNISafe.GetObjectClass(jobject); this.m_jobject = AndroidJNI.NewGlobalRef(jobject); this.m_jclass = AndroidJNI.NewGlobalRef(objectClass); AndroidJNISafe.DeleteLocalRef(objectClass); }
public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs) { int num = 0; foreach (object obj in args) { if (obj is string || obj is AndroidJavaRunnable || obj is AndroidJavaProxy || obj is Array) { AndroidJNISafe.DeleteLocalRef(jniArgs[num].l); } num++; } }
private static IntPtr GetStaticMethodID(string clazz, string methodName, string signature) { IntPtr num = AndroidJNISafe.FindClass(clazz); try { return(AndroidJNISafe.GetStaticMethodID(num, methodName, signature)); } finally { AndroidJNISafe.DeleteLocalRef(num); } }
public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs) { int index = 0; foreach (object obj2 in args) { if (((obj2 is string) || (obj2 is AndroidJavaRunnable)) || ((obj2 is AndroidJavaProxy) || (obj2 is Array))) { AndroidJNISafe.DeleteLocalRef(jniArgs[index].l); } index++; } }
internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass) { AndroidJavaClass result; try { result = new AndroidJavaClass(jclass); } finally { AndroidJNISafe.DeleteLocalRef(jclass); } return(result); }
public static IntPtr GetConstructorMember(IntPtr jclass, string signature) { jvalue[] args = new jvalue[2]; try { args[0].l = jclass; args[1].l = AndroidJNISafe.NewStringUTF(signature); return(AndroidJNISafe.CallStaticObjectMethod(AndroidReflection.s_ReflectionHelperClass, AndroidReflection.s_ReflectionHelperGetConstructorID, args)); } finally { AndroidJNISafe.DeleteLocalRef(args[1].l); } }
public static void DeleteJNIArgArray(object[] args, jvalue[] jniArgs) { int num = 0; for (int i = 0; i < args.Length; i++) { object obj = args[i]; if (obj is string || obj is AndroidJavaRunnable || obj is AndroidJavaProxy || obj is Array) { AndroidJNISafe.DeleteLocalRef(jniArgs[num].l); } num++; } }
internal static AndroidJavaClass AndroidJavaClassDeleteLocalRef(IntPtr jclass) { AndroidJavaClass class2; try { class2 = new AndroidJavaClass(jclass); } finally { AndroidJNISafe.DeleteLocalRef(jclass); } return(class2); }
internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject) { AndroidJavaObject obj2; try { obj2 = new AndroidJavaObject(jobject); } finally { AndroidJNISafe.DeleteLocalRef(jobject); } return(obj2); }
internal static AndroidJavaObject AndroidJavaObjectDeleteLocalRef(IntPtr jobject) { AndroidJavaObject result; try { result = new AndroidJavaObject(jobject); } finally { AndroidJNISafe.DeleteLocalRef(jobject); } return(result); }
private static IntPtr GetStaticMethodID(string clazz, string methodName, string signature) { IntPtr intPtr = AndroidJNISafe.FindClass(clazz); IntPtr staticMethodID; try { staticMethodID = AndroidJNISafe.GetStaticMethodID(intPtr, methodName, signature); } finally { AndroidJNISafe.DeleteLocalRef(intPtr); } return(staticMethodID); }
public static IntPtr GetMethodMember(IntPtr jclass, string methodName, string signature, bool isStatic) { jvalue[] array = new jvalue[4]; try { array[0].l = jclass; array[1].l = AndroidJNISafe.NewStringUTF(methodName); array[2].l = AndroidJNISafe.NewStringUTF(signature); array[3].z = isStatic; return(AndroidJNISafe.CallStaticObjectMethod(s_ReflectionHelperClass, s_ReflectionHelperGetMethodID, array)); } finally { AndroidJNISafe.DeleteLocalRef(array[1].l); AndroidJNISafe.DeleteLocalRef(array[2].l); } }
public static IntPtr GetFieldMember(IntPtr jclass, string fieldName, string signature, bool isStatic) { jvalue[] args = new jvalue[4]; try { args[0].l = jclass; args[1].l = AndroidJNISafe.NewStringUTF(fieldName); args[2].l = AndroidJNISafe.NewStringUTF(signature); args[3].z = isStatic; return(AndroidJNISafe.CallStaticObjectMethod(AndroidReflection.s_ReflectionHelperClass, AndroidReflection.s_ReflectionHelperGetFieldID, args)); } finally { AndroidJNISafe.DeleteLocalRef(args[1].l); AndroidJNISafe.DeleteLocalRef(args[2].l); } }
public static void CheckException() { IntPtr intPtr = AndroidJNI.ExceptionOccurred(); if (intPtr != IntPtr.Zero) { AndroidJNI.ExceptionClear(); IntPtr intPtr2 = AndroidJNI.FindClass("java/lang/Throwable"); try { IntPtr methodID = AndroidJNI.GetMethodID(intPtr2, "toString", "()Ljava/lang/String;"); throw new AndroidJavaException(AndroidJNI.CallStringMethod(intPtr, methodID, new jvalue[0])); } finally { AndroidJNISafe.DeleteLocalRef(intPtr); AndroidJNISafe.DeleteLocalRef(intPtr2); } } }
private void _AndroidJavaObject(string className, params object[] args) { this.DebugPrint("Creating AndroidJavaObject from " + className); if (args == null) { args = new object[1]; } using (AndroidJavaObject androidJavaObject = AndroidJavaObject.FindClass(className)) { this.m_jclass = AndroidJNI.NewGlobalRef(androidJavaObject.GetRawObject()); jvalue[] jniArgArray = AndroidJNIHelper.CreateJNIArgArray(args); try { IntPtr localref = AndroidJNISafe.NewObject(this.m_jclass, AndroidJNIHelper.GetConstructorID(this.m_jclass, args), jniArgArray); this.m_jobject = AndroidJNI.NewGlobalRef(localref); AndroidJNISafe.DeleteLocalRef(localref); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgArray); } } }
public static IntPtr GetConstructorID(IntPtr jclass, string signature) { IntPtr num = IntPtr.Zero; try { num = AndroidReflection.GetConstructorMember(jclass, signature); return(AndroidJNISafe.FromReflectedMethod(num)); } catch (Exception ex) { IntPtr methodId = AndroidJNISafe.GetMethodID(jclass, "<init>", signature); if (methodId != IntPtr.Zero) { return(methodId); } throw ex; } finally { AndroidJNISafe.DeleteLocalRef(num); } }
public static IntPtr GetMethodID(IntPtr jclass, string methodName, string signature, bool isStatic) { IntPtr num = IntPtr.Zero; try { num = AndroidReflection.GetMethodMember(jclass, methodName, signature, isStatic); return(AndroidJNISafe.FromReflectedMethod(num)); } catch (Exception ex) { IntPtr methodIdFallback = _AndroidJNIHelper.GetMethodIDFallback(jclass, methodName, signature, isStatic); if (methodIdFallback != IntPtr.Zero) { return(methodIdFallback); } throw ex; } finally { AndroidJNISafe.DeleteLocalRef(num); } }
public static IntPtr GetFieldID(IntPtr jclass, string fieldName, string signature, bool isStatic) { IntPtr num1 = IntPtr.Zero; try { num1 = AndroidReflection.GetFieldMember(jclass, fieldName, signature, isStatic); return(AndroidJNISafe.FromReflectedField(num1)); } catch (Exception ex) { IntPtr num2 = !isStatic?AndroidJNISafe.GetFieldID(jclass, fieldName, signature) : AndroidJNISafe.GetStaticFieldID(jclass, fieldName, signature); if (num2 != IntPtr.Zero) { return(num2); } throw ex; } finally { AndroidJNISafe.DeleteLocalRef(num1); } }
public static ArrayType ConvertFromJNIArray <ArrayType>(IntPtr array) { Type elementType = typeof(ArrayType).GetElementType(); if (AndroidReflection.IsPrimitive(elementType)) { if (elementType == typeof(int)) { return((ArrayType)(object)AndroidJNISafe.FromIntArray(array)); } if (elementType == typeof(bool)) { return((ArrayType)(object)AndroidJNISafe.FromBooleanArray(array)); } if (elementType == typeof(byte)) { return((ArrayType)(object)AndroidJNISafe.FromByteArray(array)); } if (elementType == typeof(short)) { return((ArrayType)(object)AndroidJNISafe.FromShortArray(array)); } if (elementType == typeof(long)) { return((ArrayType)(object)AndroidJNISafe.FromLongArray(array)); } if (elementType == typeof(float)) { return((ArrayType)(object)AndroidJNISafe.FromFloatArray(array)); } if (elementType == typeof(double)) { return((ArrayType)(object)AndroidJNISafe.FromDoubleArray(array)); } if (elementType == typeof(char)) { return((ArrayType)(object)AndroidJNISafe.FromCharArray(array)); } return(default(ArrayType)); } if (elementType == typeof(string)) { int arrayLength = AndroidJNISafe.GetArrayLength(array); string[] array2 = new string[arrayLength]; for (int i = 0; i < arrayLength; i++) { IntPtr objectArrayElement = AndroidJNI.GetObjectArrayElement(array, i); array2[i] = AndroidJNISafe.GetStringUTFChars(objectArrayElement); AndroidJNISafe.DeleteLocalRef(objectArrayElement); } return((ArrayType)(object)array2); } if (elementType == typeof(AndroidJavaObject)) { int arrayLength2 = AndroidJNISafe.GetArrayLength(array); AndroidJavaObject[] array3 = new AndroidJavaObject[arrayLength2]; for (int j = 0; j < arrayLength2; j++) { IntPtr objectArrayElement2 = AndroidJNI.GetObjectArrayElement(array, j); array3[j] = new AndroidJavaObject(objectArrayElement2); AndroidJNISafe.DeleteLocalRef(objectArrayElement2); } return((ArrayType)(object)array3); } throw new Exception("JNI: Unknown generic array type '" + elementType + "'"); }