public void InitPlugin() { unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); pluginClass = new AndroidJavaClass("com.TL.openfile.FileOpener"); instancePtr = AndroidJNI.CallStaticObjectMethod(pluginClass.GetRawClass(), AndroidJNI.GetStaticMethodID(pluginClass.GetRawClass(), "instance", "()Lcom/TL/openfile/FileOpener;"), new jvalue[] { }); // currentActivityPtr = AndroidJNI.GetStaticObjectField // ( // unityClass.GetRawClass(), AndroidJNI.GetStaticFieldID // ( // unityClass.GetRawClass(), "currentActivity", "Landroid/app/Activity;" // ) // ); downloadDirectory = AndroidJNI.CallStaticStringMethod ( instancePtr, AndroidJNI.GetMethodID ( pluginClass.GetRawClass(), "GetDownloadDirectory", "()Ljava/lang/String;" ), new jvalue[] { } ); print("DownloadDirectory " + downloadDirectory); downloadDirectory = "/storage/emulated/0/"; print("DownloadDirectory " + downloadDirectory); }
public static void CheckException() { IntPtr localref = AndroidJNI.ExceptionOccurred(); if (!(localref != IntPtr.Zero)) { return; } AndroidJNI.ExceptionClear(); IntPtr class1 = AndroidJNI.FindClass("java/lang/Throwable"); IntPtr class2 = AndroidJNI.FindClass("android/util/Log"); try { IntPtr methodId = AndroidJNI.GetMethodID(class1, "toString", "()Ljava/lang/String;"); IntPtr staticmethodId = AndroidJNI.GetStaticMethodID(class2, "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(class2, staticmethodId, args); throw new AndroidJavaException(message, javaStackTrace); } finally { DeleteLocalRef(localref); DeleteLocalRef(class1); DeleteLocalRef(class2); } }
private void AndroidJNISafeCheckException() { IntPtr intPtr = AndroidJNI.ExceptionOccurred(); if (intPtr != IntPtr.Zero) { 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 { AndroidJNISafeDeleteLocalRef(intPtr); AndroidJNISafeDeleteLocalRef(intPtr2); AndroidJNISafeDeleteLocalRef(intPtr3); } } }
public static void GetApps() { IntPtr clas = AndroidJNI.FindClass("MakeImageCache"); clas = AndroidJNI.NewGlobalRef(clas); IntPtr funcID = AndroidJNI.GetMethodID(clas, "getApps", "()V"); AndroidJNI.CallStaticVoidMethod(clas, funcID, null); IntPtr nameID = AndroidJNI.GetMethodID(clas, "getName", "(I)Ljava/lang/String;"); nameID = AndroidJNI.NewGlobalRef(nameID); IntPtr length = AndroidJNI.GetMethodID(clas, "getTotalApps", "()I"); length = AndroidJNI.NewGlobalRef(length); int j = AndroidJNI.CallIntMethod(clas, length, null); Debug.Log("hehehe " + j); jvalue[] val = new jvalue[1]; val[0] = new jvalue(); Debug.Log("loading apps ..."); for (int i = 0; i < j; i++) { val[0].i = i; Debug.Log("hehehe"); Debug.Log(AndroidJNI.CallStaticStringMethod(clas, nameID, val)); } Debug.Log("loaded apps!"); }
public static string GetV4VCName(string zone_id) { jvalue[] args = new jvalue[1]; args[0].l = AndroidJNI.NewStringUTF(zone_id); string name = AndroidJNI.CallStaticStringMethod(class_UnityADC, method_getV4VCName, args); return(name); }
public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args) { Type t = typeof(T); IntPtr rawClass = AndroidJNI.FindClass(type); IntPtr method = AndroidJNI.GetStaticMethodID(rawClass, name, sig); jvalue[] jArgs = ConstructArgArray(args); if (t == typeof(bool)) { return((T)(object)AndroidJNI.CallStaticBooleanMethod( rawClass, method, jArgs)); } else if (t == typeof(string)) { return((T)(object)AndroidJNI.CallStaticStringMethod( rawClass, method, jArgs)); } else if (t == typeof(int)) { return((T)(object)AndroidJNI.CallStaticIntMethod( rawClass, method, jArgs)); } else if (t == typeof(float)) { return((T)(object)AndroidJNI.CallStaticFloatMethod( rawClass, method, jArgs)); } else if (t == typeof(double)) { return((T)(object)AndroidJNI.CallStaticDoubleMethod( rawClass, method, jArgs)); } else if (t == typeof(byte)) { return((T)(object)AndroidJNI.CallStaticByteMethod( rawClass, method, jArgs)); } else if (t == typeof(char)) { return((T)(object)AndroidJNI.CallStaticCharMethod( rawClass, method, jArgs)); } else if (t == typeof(long)) { return((T)(object)AndroidJNI.CallStaticLongMethod( rawClass, method, jArgs)); } else if (t == typeof(short)) { return((T)(object)AndroidJNI.CallStaticShortMethod( rawClass, method, jArgs)); } else { return(StaticInvokeObjectCall <T>(type, name, sig, args)); } }
public static string CallStaticStringMethod(IntPtr clazz, IntPtr methodId, jvalue[] args) { try { return(AndroidJNI.CallStaticStringMethod(clazz, methodId, args)); } finally { CheckException(); } }
// --------------------------------------------------------------------------------------------------- public static string GetDCIMPath() { IntPtr classID = AndroidJNI.FindClass("com/intel/inde/mp/samples/unity/Capturing"); // com.intel.inde.mp.samples.unity // com/intel/penelope/Capturing IntPtr getDirectoryDCIMMethodID = AndroidJNI.GetStaticMethodID(classID, "getDirectoryDCIM", "()Ljava/lang/String;"); jvalue[] args = new jvalue[0]; string videoDir = AndroidJNI.CallStaticStringMethod(classID, getDirectoryDCIMMethodID, args); return(videoDir); }
public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args) { T local; Type type2 = typeof(T); IntPtr clazz = AndroidJNI.FindClass(type); IntPtr methodID = AndroidJNI.GetStaticMethodID(clazz, name, sig); jvalue[] jvalueArray = ConstructArgArray(args); try { if (type2 == typeof(bool)) { return((T)AndroidJNI.CallStaticBooleanMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(string)) { return((T)AndroidJNI.CallStaticStringMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(int)) { return((T)AndroidJNI.CallStaticIntMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(float)) { return((T)AndroidJNI.CallStaticFloatMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(double)) { return((T)AndroidJNI.CallStaticDoubleMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(byte)) { return((T)AndroidJNI.CallStaticByteMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(char)) { return((T)AndroidJNI.CallStaticCharMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(long)) { return((T)AndroidJNI.CallStaticLongMethod(clazz, methodID, jvalueArray)); } if (type2 == typeof(short)) { return((T)AndroidJNI.CallStaticShortMethod(clazz, methodID, jvalueArray)); } local = StaticInvokeObjectCall <T>(type, name, sig, args); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jvalueArray); } return(local); }
public string GetAppName() { IntPtr methodid = AndroidJNIHelper.GetMethodID(classId, "getAppName", "()Ljava/lang/String", true); if (methodid != IntPtr.Zero) { string ret = AndroidJNI.CallStaticStringMethod(classId, methodid, null); return(ret); } return(""); }
/* * Get the username of the currently logged in user. */ public static string getUsername() { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[0]; return(AndroidJNI.CallStaticStringMethod(swarmUnityInterface, getUsernameMethod, args)); #endif #endif return(""); }
public static string JNICallString(string classPath, string methodName, params object[] parameters) { string signature; jvalue[] args; PrepareJNI(parameters, out args, "Ljava/lang/String;", out signature); IntPtr clsPtr = AndroidJNI.FindClass(classPath); IntPtr methodPtr = AndroidJNI.GetStaticMethodID(clsPtr, methodName, signature); Debug.Log("Calling JNI string method " + classPath + "." + methodName + ", signature: " + signature); return(AndroidJNI.CallStaticStringMethod(clsPtr, methodPtr, args)); }
void Start() { btn1.onClick.AddListener(() => { //通过对象调用非静态接口----------------------------------------------------------------- //获得类 IntPtr clz = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer"); IntPtr fid = AndroidJNI.GetStaticFieldID(clz, "currentActivity", "Landroid/app/Activity;"); //获得静态属性 IntPtr obj = AndroidJNI.GetStaticObjectField(clz, fid); //获得类 IntPtr clz_OurAppActitvityClass = AndroidJNI.FindClass("com/linxinfa/game/MyActivity"); //获得方法 IntPtr methodId = AndroidJNI.GetMethodID(clz_OurAppActitvityClass, "HelloMethod", "(Ljava/lang/String;)Ljava/lang/String;"); //参数 jvalue v = new jvalue(); v.l = AndroidJNI.NewStringUTF("I am Unity"); var result = AndroidJNI.CallStringMethod(obj, methodId, new jvalue[] { v }); txt.text = result; AndroidJNI.DeleteLocalRef(clz); AndroidJNI.DeleteLocalRef(fid); AndroidJNI.DeleteLocalRef(obj); AndroidJNI.DeleteLocalRef(clz_OurAppActitvityClass); AndroidJNI.DeleteLocalRef(methodId); }); btn2.onClick.AddListener(() => { //通过类调用静态接口---------------------------------------------------------------------------- //获得类 IntPtr clz = AndroidJNI.FindClass("com/linxinfa/game/MyActivity"); //调用静态方法 IntPtr methodId = AndroidJNI.GetStaticMethodID(clz, "HelloStaticMethod", "(II)Ljava/lang/String;"); //参数 jvalue v1 = new jvalue(); v1.i = 10; jvalue v2 = new jvalue(); v2.i = 15; var result = AndroidJNI.CallStaticStringMethod(clz, methodId, new jvalue[] { v1, v2 }); txt.text = result; AndroidJNI.DeleteLocalRef(clz); AndroidJNI.DeleteLocalRef(methodId); }); }
private string AndroidJNISafeCallStaticStringMethod(IntPtr clazz, IntPtr methodID, jvalue[] args) { string result; try { result = AndroidJNI.CallStaticStringMethod(clazz, methodID, args); } finally { AndroidJNISafeCheckException(); } return(result); }
public static string GetAndroidSDCardRoot() { #if UNITY_ANDROID && !UNITY_EDITOR try { string sig = AndroidJNIHelper.GetSignature <string>(new object[0]); var ptr = AndroidJNI.GetStaticMethodID(GamePluginMgrPtr, "GetSdCardRoot", sig); string path = AndroidJNI.CallStaticStringMethod(GamePluginMgrPtr, ptr, new jvalue[0]); return(path); } catch (Exception exception) { //ssLogger.Log(exception.Message); } #endif return(null); }
public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args) { Type typeFromHandle = typeof(T); IntPtr intPtr = AndroidJNI.FindClass(type); IntPtr staticMethodID = AndroidJNI.GetStaticMethodID(intPtr, name, sig); jvalue[] array = ConstructArgArray(args); if (typeFromHandle == typeof(bool)) { return((T)(object)AndroidJNI.CallStaticBooleanMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(string)) { return((T)(object)AndroidJNI.CallStaticStringMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(int)) { return((T)(object)AndroidJNI.CallStaticIntMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(float)) { return((T)(object)AndroidJNI.CallStaticFloatMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(double)) { return((T)(object)AndroidJNI.CallStaticDoubleMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(byte)) { return((T)(object)AndroidJNI.CallStaticByteMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(char)) { return((T)(object)AndroidJNI.CallStaticCharMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(long)) { return((T)(object)AndroidJNI.CallStaticLongMethod(intPtr, staticMethodID, array)); } if (typeFromHandle == typeof(short)) { return((T)(object)AndroidJNI.CallStaticShortMethod(intPtr, staticMethodID, array)); } return(StaticInvokeObjectCall <T>(type, name, sig, args)); }
public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args) { Type type1 = typeof(T); IntPtr num = AndroidJNI.FindClass(type); IntPtr staticMethodId = AndroidJNI.GetStaticMethodID(num, name, sig); jvalue[] jvalueArray = JavaObjWrapper.ConstructArgArray(args); if ((object)type1 == (object)typeof(bool)) { return((T)(ValueType)AndroidJNI.CallStaticBooleanMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(string)) { return((T)AndroidJNI.CallStaticStringMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(int)) { return((T)(ValueType)AndroidJNI.CallStaticIntMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(float)) { return((T)(ValueType)AndroidJNI.CallStaticFloatMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(double)) { return((T)(ValueType)AndroidJNI.CallStaticDoubleMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(byte)) { return((T)(ValueType)AndroidJNI.CallStaticByteMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(char)) { return((T)(ValueType)AndroidJNI.CallStaticCharMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(long)) { return((T)(ValueType)AndroidJNI.CallStaticLongMethod(num, staticMethodId, jvalueArray)); } if ((object)type1 == (object)typeof(short)) { return((T)(ValueType)AndroidJNI.CallStaticShortMethod(num, staticMethodId, jvalueArray)); } return(JavaObjWrapper.StaticInvokeObjectCall <T>(type, name, sig, args)); }
void Start() { if (!Application.isEditor) { // First, obtain the current activity context using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { playerActivityContext = jc.GetStatic <AndroidJavaObject>("currentActivity"); } // Search for our class IntPtr classID = AndroidJNI.FindClass("com/intel/inde/mp/samples/unity/Capturing"); // com.intel.inde.mp.samples.unity // com/intel/penelope/Capturing // Search for it's contructor constructorMethodID = AndroidJNI.GetMethodID(classID, "<init>", "(Landroid/content/Context;II)V"); if (constructorMethodID == IntPtr.Zero) { Debug.LogError("Can't find Capturing constructor."); return; } // Register our methods initCapturingMethodID = AndroidJNI.GetMethodID(classID, "initCapturing", "(IIII)V"); if (initCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find initCapturing() method."); return; } startCapturingMethodID = AndroidJNI.GetMethodID(classID, "startCapturing", "(Ljava/lang/String;)V"); if (startCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find startCapturing() method."); return; } captureFrameMethodID = AndroidJNI.GetMethodID(classID, "captureFrame", "(I)V"); if (captureFrameMethodID == IntPtr.Zero) { Debug.LogError("Can't find captureFrame() method."); return; } stopCapturingMethodID = AndroidJNI.GetMethodID(classID, "stopCapturing", "()V"); if (stopCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find stopCapturingMethodID() method."); return; } // Register and call our static method getDirectoryDCIMMethodID = AndroidJNI.GetStaticMethodID(classID, "getDirectoryDCIM", "()Ljava/lang/String;"); jvalue[] args = new jvalue[0]; videoDir = AndroidJNI.CallStaticStringMethod(classID, getDirectoryDCIMMethodID, args); // Create Capturing object jvalue[] constructorParameters = AndroidJNIHelper.CreateJNIArgArray(new object[] { playerActivityContext, Screen.width, Screen.height }); IntPtr local_capturingObject = AndroidJNI.NewObject(classID, constructorMethodID, constructorParameters); if (local_capturingObject == IntPtr.Zero) { Debug.LogError("--- Can't create Capturing object."); return; } // Keep a global reference to it capturingObject = AndroidJNI.NewGlobalRef(local_capturingObject); AndroidJNI.DeleteLocalRef(local_capturingObject); AndroidJNI.DeleteLocalRef(classID); } isRunning = false; Debug.Log("--- videoFrameRate = " + videoFrameRate); Debug.Log("--- 1.0f / videoFrameRate = " + 1.0f / videoFrameRate); }
static string AndroidGetCustomID() { jvalue[] args = new jvalue[0]; return(AndroidJNI.CallStaticStringMethod(class_UnityADC, method_getCustomID, args)); }
static string AndroidStatusForZone(string zone_id) { jvalue[] args = new jvalue[1]; args[0].l = AndroidJNI.NewStringUTF(zone_id); return(AndroidJNI.CallStaticStringMethod(class_UnityADC, method_statusForZone, args)); }
public static string GetDeviceID() { jvalue[] args = new jvalue[0]; return(AndroidJNI.CallStaticStringMethod(class_UnityADC, method_getDeviceID, args)); }