public static string AppData() { if (Application.platform == RuntimePlatform.Android) { try { System.IntPtr obj_context = AndroidJNI.FindClass("android/content/ContextWrapper"); System.IntPtr method_getFilesDir = AndroidJNIHelper.GetMethodID(obj_context, "getFilesDir", "()Ljava/io/File;"); using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { System.IntPtr file = AndroidJNI.CallObjectMethod(obj_Activity.GetRawObject(), method_getFilesDir, new jvalue[0]); System.IntPtr obj_file = AndroidJNI.FindClass("java/io/File"); System.IntPtr method_getAbsolutePath = AndroidJNIHelper.GetMethodID(obj_file, "getAbsolutePath", "()Ljava/lang/String;"); string path = AndroidJNI.CallStringMethod(file, method_getAbsolutePath, new jvalue[0]); if (path != null) { ValkyrieDebug.Log(path); return(path); } } } } catch (System.Exception e) { ValkyrieDebug.Log(e.ToString()); } return(""); } return(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "/Valkyrie"); }
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); } } }
private void UpdateCharastricsKeys(string addr, IntPtr device) { List <BleCharastericsKeyInfo> list = null; if (this.charastericsKeyInfos.TryGetValue(addr, out list)) { return; } var blitCharaMethod = AndroidJNI.GetMethodID(this.bleDeviceCls, "blitChara", "()V"); var getKeyNumMethod = AndroidJNI.GetMethodID(this.bleDeviceCls, "getKeysNum", "()I"); var getServiceUuidFromKeysMethod = AndroidJNI.GetMethodID(this.bleDeviceCls, "getServiceUuidFromKeys", "(I)Ljava/lang/String;"); var getCharastricUuidFromKeysMethod = AndroidJNI.GetMethodID(this.bleDeviceCls, "getCharastricUuidFromKeys", "(I)Ljava/lang/String;"); // blit chara AndroidJNI.CallVoidMethod(device, blitCharaMethod, null); int num = AndroidJNI.CallIntMethod(device, getKeyNumMethod, null); if (num <= 0) { return; } list = new List <BleCharastericsKeyInfo>(num); for (int i = 0; i < num; ++i) { this.argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(i)); string serviceUuid = AndroidJNI.CallStringMethod(device, getServiceUuidFromKeysMethod, argBuilder.Build()); string charastricUuid = AndroidJNI.CallStringMethod(device, getCharastricUuidFromKeysMethod, argBuilder.Build()); var keyInfo = new BleCharastericsKeyInfo(addr, serviceUuid, charastricUuid); list.Add(keyInfo); } this.charastericsKeyInfos.Add(addr, list); }
public void UpdateScannerResult() { AndroidJNI.PushLocalFrame(32); var scanner = GetScanner(); var blitMethod = AndroidJNI.GetMethodID(this.bleScannerCls, "blit", "()V"); var getDeviceNumMethod = AndroidJNI.GetMethodID(this.bleScannerCls, "getDeviceNum", "()I"); var getDeviceAddrMethod = AndroidJNI.GetMethodID(this.bleScannerCls, "getDeviceAddr", "(I)Ljava/lang/String;"); var getDeviceNameByAddrMethod = AndroidJNI.GetMethodID(this.bleScannerCls, "getDeviceNameByAddr", "(Ljava/lang/String;)Ljava/lang/String;"); var getRssiByAddrMethod = AndroidJNI.GetMethodID(this.bleScannerCls, "getRssiByAddr", "(Ljava/lang/String;)I"); AndroidJNI.CallVoidMethod(scanner, blitMethod, null); int num = AndroidJNI.CallIntMethod(scanner, getDeviceNumMethod, null); scannedDevices.Clear(); for (int i = 0; i < num; ++i) { argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(i)); string addr = AndroidJNI.CallStringMethod(scanner, getDeviceAddrMethod, argBuilder.Build()); argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(addr)); string name = AndroidJNI.CallStringMethod(scanner, getDeviceNameByAddrMethod, argBuilder.Build()); int rssi = AndroidJNI.CallIntMethod(scanner, getRssiByAddrMethod, argBuilder.Build()); var scanDevice = new BleScannedDevice(addr, name, rssi); this.scannedDevices.Add(scanDevice); } AndroidJNI.PopLocalFrame(IntPtr.Zero); }
void Start() { #if ANDROID_DEVICE && !UNITY_EDITOR string appPath = ""; try { IntPtr obj_context = AndroidJNI.FindClass("android/content/ContextWrapper"); IntPtr method_getFilesDir = AndroidJNIHelper.GetMethodID(obj_context, "getFilesDir", "()Ljava/io/File;"); using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { IntPtr file = AndroidJNI.CallObjectMethod(obj_Activity.GetRawObject(), method_getFilesDir, new jvalue[0]); IntPtr obj_file = AndroidJNI.FindClass("java/io/File"); IntPtr method_getAbsolutePath = AndroidJNIHelper.GetMethodID(obj_file, "getAbsolutePath", "()Ljava/lang/String;"); appPath = AndroidJNI.CallStringMethod(file, method_getAbsolutePath, new jvalue[0]); if (appPath == null) { return; } Debug.Log("Android app path: " + appPath); } } appPath = appPath.Replace("/files", "/lib/"); } catch (Exception e) { Debug.Log(e.ToString()); } Pvr_SpatializerUnlock(appPath); #endif }
string getDataPath() { #if UNITY_ANDROID && !UNITY_EDITOR string path = ""; try { IntPtr obj_context = AndroidJNI.FindClass("android/content/ContextWrapper"); IntPtr method_getFilesDir = AndroidJNIHelper.GetMethodID(obj_context, "getFilesDir", "()Ljava/io/File;"); using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { IntPtr file = AndroidJNI.CallObjectMethod(obj_Activity.GetRawObject(), method_getFilesDir, new jvalue[0]); IntPtr obj_file = AndroidJNI.FindClass("java/io/File"); IntPtr method_getAbsolutePath = AndroidJNIHelper.GetMethodID(obj_file, "getAbsolutePath", "()Ljava/lang/String;"); path = AndroidJNI.CallStringMethod(file, method_getAbsolutePath, new jvalue[0]); if (path != null) { ////Debug.Log("Got internal path: " + path); } else { ////Debug.Log("Using fallback path"); path = "/data/data/com.DefaultCompany.sdkGame/files"; } } } return(path); } catch (Exception e) { ////Debug.Log(e.ToString()); return(""); } #else return(Application.persistentDataPath); #endif }
public void UpdateDisconnectedDevices() { var updateDisconnectedMethod = AndroidJNI.GetMethodID(this.bleManagerCls, "updateDisconnected", "()V"); var getDisconnectedNumMethod = AndroidJNI.GetMethodID(this.bleManagerCls, "getDisconnectedDeviceNum", "()I"); var getDisconnectedDeviceAddr = AndroidJNI.GetMethodID(this.bleManagerCls, "getDisconnectedDeviceAddr", "(I)Ljava/lang/String;"); AndroidJNI.CallVoidMethod(this.javaBleManagerObj, updateDisconnectedMethod, null); disconnectedDevices.Clear(); int num = AndroidJNI.CallIntMethod(this.javaBleManagerObj, getDisconnectedNumMethod, null); for (int i = 0; i < num; ++i) { this.argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(i)); string addr = AndroidJNI.CallStringMethod(this.javaBleManagerObj, getDisconnectedDeviceAddr, this.argBuilder.Build()); this.disconnectedDevices.Add(addr); } foreach (var addr in disconnectedDevices) { this.charastericsKeyInfos.Remove(addr); } }
private static string InternalGetPersistentDataPath() { string path = ""; try { IntPtr obj_context = AndroidJNI.FindClass("android/os/Environment"); IntPtr method_getExternalStorageDirectory = AndroidJNIHelper.GetMethodID(obj_context, "getExternalStorageDirectory", "()Ljava/io/File;", true); IntPtr file = AndroidJNI.CallStaticObjectMethod(obj_context, method_getExternalStorageDirectory, new jvalue[0]); IntPtr obj_file = AndroidJNI.FindClass("java/io/File"); IntPtr method_getAbsolutePath = AndroidJNIHelper.GetMethodID(obj_file, "getAbsolutePath", "()Ljava/lang/String;"); path = AndroidJNI.CallStringMethod(file, method_getAbsolutePath, new jvalue[0]); if (path != null) { path += "/Android/data/" + GetPackageName() + "/files"; } else { path = ""; } } catch (Exception e) { Debug.Log(e.ToString()); } return(path); }
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 Dictionary <string, object> DictionaryFromJavaMap(IntPtr source) { var dict = new Dictionary <string, object>(); var entries = AndroidJNI.CallObjectMethod(source, MapEntrySet, new jvalue[] {}); var iterator = AndroidJNI.CallObjectMethod(entries, CollectionIterator, new jvalue[] {}); while (AndroidJNI.CallBooleanMethod(iterator, IteratorHasNext, new jvalue[] {})) { var entry = AndroidJNI.CallObjectMethod(iterator, IteratorNext, new jvalue[] {}); var key = AndroidJNI.CallStringMethod(entry, MapEntryGetKey, new jvalue[] {}); var value = AndroidJNI.CallObjectMethod(entry, MapEntryGetValue, new jvalue[] {}); if (value != null && value != IntPtr.Zero) { var valueClass = AndroidJNI.CallObjectMethod(value, ObjectGetClass, new jvalue[] {}); if (AndroidJNI.CallBooleanMethod(valueClass, ClassIsArray, new jvalue[] {})) { var values = AndroidJNIHelper.ConvertFromJNIArray <string[]>(value); dict.AddToPayload(key, values); } else if (AndroidJNI.IsInstanceOf(value, MapClass)) { dict.AddToPayload(key, DictionaryFromJavaMap(value)); } else { // FUTURE(dm): check if Integer, Long, Double, or Float before calling toString dict.AddToPayload(key, AndroidJNI.CallStringMethod(value, ObjectToString, new jvalue[] {})); } AndroidJNI.DeleteLocalRef(value); } AndroidJNI.DeleteLocalRef(entry); } return(dict); }
public static string GetSysTime() { AndroidJNI.AttachCurrentThread(); IntPtr javaClass = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer"); IntPtr fid = AndroidJNI.GetStaticFieldID(javaClass, "currentActivity", "Landroid/app/Activity;"); IntPtr obj = AndroidJNI.GetStaticObjectField(javaClass, fid); IntPtr pluginClass = AndroidJNI.FindClass("com/hiscene/androidsysinfo/AndroidPlugin"); IntPtr initMethod = AndroidJNI.GetMethodID(pluginClass, "<init>", "(Landroid/content/Context;)V"); jvalue[] jv = new jvalue[1]; //TODO IntPtr pobj = AndroidJNI.NewObject(pluginClass, initMethod, jv); IntPtr enableMethod = AndroidJNI.GetMethodID(pluginClass, "getSysTime", "()Ljava/lang/String;"); return(AndroidJNI.CallStringMethod(pobj, enableMethod, new jvalue[1])); }
public T InvokeCall <T>(string name, string sig, params object[] args) { T local; Type type = typeof(T); IntPtr methodID = AndroidJNI.GetMethodID(this.RawClass, name, sig); if (methodID == IntPtr.Zero) { Debug.LogError("Cannot get method for " + name); throw new Exception("Cannot get method for " + name); } jvalue[] jvalueArray = ConstructArgArray(args); try { if (type == typeof(bool)) { return((T)AndroidJNI.CallBooleanMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(string)) { return((T)AndroidJNI.CallStringMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(int)) { return((T)AndroidJNI.CallIntMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(float)) { return((T)AndroidJNI.CallFloatMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(double)) { return((T)AndroidJNI.CallDoubleMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(byte)) { return((T)AndroidJNI.CallByteMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(char)) { return((T)AndroidJNI.CallCharMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(long)) { return((T)AndroidJNI.CallLongMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(short)) { return((T)AndroidJNI.CallShortMethod(this.raw, methodID, jvalueArray)); } local = this.InvokeObjectCall <T>(name, sig, args); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jvalueArray); } return(local); }
public static string CallStringMethod(IntPtr obj, IntPtr methodId, jvalue[] args) { try { return(AndroidJNI.CallStringMethod(obj, methodId, args)); } finally { CheckException(); } }
protected override void initParamsFromAndroidJavaObject(AndroidJavaObject instance) { base.initParamsFromAndroidJavaObject(instance); this.creativeType = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCreativeType", "()Ljava/lang/String"), new jvalue[0] { }); this.skipText = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getSkipText", "()Ljava/lang/String"), new jvalue[0] { }); this.autoPlay = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isAutoPlay", "()Z"), new jvalue[0] { }); }
public T InvokeCall <T>(string name, string sig, params object[] args) { System.Type type = typeof(T); IntPtr objectClass = AndroidJNI.GetObjectClass(this.raw); IntPtr methodID = AndroidJNI.GetMethodID(objectClass, name, sig); jvalue[] jvalueArray = ConstructArgArray(args); if (objectClass == IntPtr.Zero) { Debug.LogError("Cannot get rawClass object!"); throw new Exception("Cannot get rawClass object"); } if (methodID == IntPtr.Zero) { Debug.LogError("Cannot get method for " + name); throw new Exception("Cannot get method for " + name); } if (type == typeof(bool)) { return((T)AndroidJNI.CallBooleanMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(string)) { return((T)AndroidJNI.CallStringMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(int)) { return((T)AndroidJNI.CallIntMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(float)) { return((T)AndroidJNI.CallFloatMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(double)) { return((T)AndroidJNI.CallDoubleMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(byte)) { return((T)AndroidJNI.CallByteMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(char)) { return((T)AndroidJNI.CallCharMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(long)) { return((T)AndroidJNI.CallLongMethod(this.raw, methodID, jvalueArray)); } if (type == typeof(short)) { return((T)AndroidJNI.CallShortMethod(this.raw, methodID, jvalueArray)); } return(this.InvokeObjectCall <T>(name, sig, args)); }
public T InvokeCall <T>(string name, string sig, params object[] args) { Type t = typeof(T); IntPtr method = AndroidJNI.GetMethodID(RawClass, name, sig); jvalue[] jArgs = ConstructArgArray(args); if (method == IntPtr.Zero) { Debug.LogError("Cannot get method for " + name); throw new Exception("Cannot get method for " + name); } if (t == typeof(bool)) { return((T)(object)AndroidJNI.CallBooleanMethod(raw, method, jArgs)); } else if (t == typeof(string)) { return((T)(object)AndroidJNI.CallStringMethod(raw, method, jArgs)); } else if (t == typeof(int)) { return((T)(object)AndroidJNI.CallIntMethod(raw, method, jArgs)); } else if (t == typeof(float)) { return((T)(object)AndroidJNI.CallFloatMethod(raw, method, jArgs)); } else if (t == typeof(double)) { return((T)(object)AndroidJNI.CallDoubleMethod(raw, method, jArgs)); } else if (t == typeof(byte)) { return((T)(object)AndroidJNI.CallByteMethod(raw, method, jArgs)); } else if (t == typeof(char)) { return((T)(object)AndroidJNI.CallCharMethod(raw, method, jArgs)); } else if (t == typeof(long)) { return((T)(object)AndroidJNI.CallLongMethod(raw, method, jArgs)); } else if (t == typeof(short)) { return((T)(object)AndroidJNI.CallShortMethod(raw, method, jArgs)); } else { return(InvokeObjectCall <T>(name, sig, args)); } }
private static ZapicPlayer ConvertPlayer(IntPtr playerPointer) { if (playerPointer == IntPtr.Zero) { return(null); } string notificationToken; string playerId; using (var zapicPlayerClass = new AndroidJavaClass("com.zapic.sdk.android.ZapicPlayer")) { var methodId = AndroidJNI.GetMethodID( zapicPlayerClass.GetRawClass(), "getNotificationToken", "()Ljava/lang/String;"); var objectArray = new object[0]; var argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { notificationToken = AndroidJNI.CallStringMethod(playerPointer, methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } methodId = AndroidJNI.GetMethodID( zapicPlayerClass.GetRawClass(), "getPlayerId", "()Ljava/lang/String;"); objectArray = new object[0]; argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { playerId = AndroidJNI.CallStringMethod(playerPointer, methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } } //TODO: Kyle, use ZapicPlayer constructor // return new ZapicPlayer // { // NotificationToken = notificationToken ?? string.Empty, // PlayerId = playerId ?? string.Empty, // }; return(null); }
protected override void initParamsFromAndroidJavaObject(AndroidJavaObject instance) { base.initParamsFromAndroidJavaObject(instance); this.progressType = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getProgressType", "()Ljava/lang/String"), new jvalue[0] { }); this.videoLength = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getVideoLength", "()Ljava/lang/String"), new jvalue[0] { }); this.progressColor = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getProgressColor", "()Ljava/lang/String"), new jvalue[0] { }); this.delay = AndroidJNI.CallLongMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCloseDelay", "()J"), new jvalue[0] { }); this.showClose = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isShowClose", "()Z"), new jvalue[0] { }); }
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); }); }
public T InvokeCall <T>(string name, string sig, params object[] args) { Type t = typeof(T); IntPtr rawClass = AndroidJNI.GetObjectClass(raw); IntPtr method = AndroidJNI.GetMethodID(rawClass, name, sig); jvalue[] jArgs = ConstructArgArray(args); if (t == typeof(bool)) { return((T)(object)AndroidJNI.CallBooleanMethod(raw, method, jArgs)); } else if (t == typeof(string)) { return((T)(object)AndroidJNI.CallStringMethod(raw, method, jArgs)); } else if (t == typeof(int)) { return((T)(object)AndroidJNI.CallIntMethod(raw, method, jArgs)); } else if (t == typeof(float)) { return((T)(object)AndroidJNI.CallFloatMethod(raw, method, jArgs)); } else if (t == typeof(double)) { return((T)(object)AndroidJNI.CallDoubleMethod(raw, method, jArgs)); } else if (t == typeof(byte)) { return((T)(object)AndroidJNI.CallByteMethod(raw, method, jArgs)); } else if (t == typeof(char)) { return((T)(object)AndroidJNI.CallCharMethod(raw, method, jArgs)); } else if (t == typeof(long)) { return((T)(object)AndroidJNI.CallLongMethod(raw, method, jArgs)); } else if (t == typeof(short)) { return((T)(object)AndroidJNI.CallShortMethod(raw, method, jArgs)); } else { return(InvokeObjectCall <T>(name, sig, args)); } }
void SubThread() { AndroidJNI.AttachCurrentThread(); // com.unity3d.player.UnityPlayer.currentActivity var currentActivity = AndroidJNI.GetStaticObjectField(classUnityPlayer, fidCurrentActivity); // currentActivity.getPackageName() var classActivity = AndroidJNI.FindClass("android/app/Activity"); var midGetPackageName = AndroidJNI.GetMethodID(classActivity, "getPackageName", "()Ljava/lang/String;"); var packageName = AndroidJNI.CallStringMethod(currentActivity, midGetPackageName, new jvalue[] {}); text = "PackageName: " + packageName; AndroidJNI.DetachCurrentThread(); }
public static string GetSysTimeAndroidJNI() { AndroidJNI.AttachCurrentThread(); IntPtr javaClass = AndroidJNI.FindClass("com/hiscene/androidsysinfo/SysTime"); IntPtr initMethod = AndroidJNI.GetMethodID(javaClass, "<init>", "()V"); IntPtr pobj = AndroidJNI.NewObject(javaClass, initMethod, AndroidJNIHelper.CreateJNIArgArray(new object[1])); IntPtr enableMethod = AndroidJNI.GetMethodID(javaClass, "getSysTime", "()Ljava/lang/String;"); return(AndroidJNI.CallStringMethod(pobj, enableMethod, new jvalue[1])); }
private Breadcrumb ConvertToBreadcrumb(IntPtr javaBreadcrumb) { var metadata = new Dictionary <string, string>(); IntPtr javaMetadata = AndroidJNI.CallObjectMethod(javaBreadcrumb, BreadcrumbGetMetadata, new jvalue[] {}); IntPtr entries = AndroidJNI.CallObjectMethod(javaMetadata, MapEntrySet, new jvalue[] {}); AndroidJNI.DeleteLocalRef(javaMetadata); IntPtr iterator = AndroidJNI.CallObjectMethod(entries, CollectionIterator, new jvalue[] {}); AndroidJNI.DeleteLocalRef(entries); while (AndroidJNI.CallBooleanMethod(iterator, IteratorHasNext, new jvalue[] {})) { IntPtr entry = AndroidJNI.CallObjectMethod(iterator, IteratorNext, new jvalue[] {}); IntPtr key = AndroidJNI.CallObjectMethod(entry, MapEntryGetKey, new jvalue[] {}); IntPtr value = AndroidJNI.CallObjectMethod(entry, MapEntryGetValue, new jvalue[] {}); AndroidJNI.DeleteLocalRef(entry); if (key != IntPtr.Zero && value != IntPtr.Zero) { metadata.Add(AndroidJNI.GetStringUTFChars(key), AndroidJNI.GetStringUTFChars(value)); } AndroidJNI.DeleteLocalRef(key); AndroidJNI.DeleteLocalRef(value); } AndroidJNI.DeleteLocalRef(iterator); IntPtr type = AndroidJNI.CallObjectMethod(javaBreadcrumb, BreadcrumbGetType, new jvalue[] {}); string typeName = AndroidJNI.CallStringMethod(type, ObjectToString, new jvalue[] {}); AndroidJNI.DeleteLocalRef(type); string name = "<empty>"; IntPtr nameObj = AndroidJNI.CallObjectMethod(javaBreadcrumb, BreadcrumbGetName, new jvalue[] {}); if (nameObj != IntPtr.Zero) { name = AndroidJNI.GetStringUTFChars(nameObj); } AndroidJNI.DeleteLocalRef(nameObj); string timestamp = AndroidJNI.CallStringMethod(javaBreadcrumb, BreadcrumbGetTimestamp, new jvalue[] {}); return(new Breadcrumb(name, timestamp, typeName, metadata)); }
protected virtual void initParamsFromAndroidJavaObject(AndroidJavaObject instance) { this.buttonText = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonText", "()Ljava/lang/String"), new jvalue[0] { }); this.buttonColor = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonColor", "()Ljava/lang/String"), new jvalue[0] { }); this.categories = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCategories", "()Ljava/lang/String"), new jvalue[0] { }); this.postback = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getPostback", "()Ljava/lang/String"), new jvalue[0] { }); this.orientation = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getOrientation", "()Ljava/lang/String"), new jvalue[0] { }); this.backButtonCanClose = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isBackButtonCanClose", "()Z"), new jvalue[0] { }); this.mute = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getMute", "()Z"), new jvalue[0] { }); }
public T InvokeCall <T>(string name, string sig, params object[] args) { Type type = typeof(T); IntPtr methodId = AndroidJNI.GetMethodID(AndroidJNI.GetObjectClass(this.raw), name, sig); jvalue[] jvalueArray = JavaObjWrapper.ConstructArgArray(args); if ((object)type == (object)typeof(bool)) { return((T)(ValueType)AndroidJNI.CallBooleanMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(string)) { return((T)AndroidJNI.CallStringMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(int)) { return((T)(ValueType)AndroidJNI.CallIntMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(float)) { return((T)(ValueType)AndroidJNI.CallFloatMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(double)) { return((T)(ValueType)AndroidJNI.CallDoubleMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(byte)) { return((T)(ValueType)AndroidJNI.CallByteMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(char)) { return((T)(ValueType)AndroidJNI.CallCharMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(long)) { return((T)(ValueType)AndroidJNI.CallLongMethod(this.raw, methodId, jvalueArray)); } if ((object)type == (object)typeof(short)) { return((T)(ValueType)AndroidJNI.CallShortMethod(this.raw, methodId, jvalueArray)); } return(this.InvokeObjectCall <T>(name, sig, args)); }
private static string GetPackageName() { string packageName = ""; try { using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { IntPtr obj_context = AndroidJNI.FindClass("android/content/ContextWrapper"); IntPtr method_getPackageName = AndroidJNIHelper.GetMethodID(obj_context, "getPackageName", "()Ljava/lang/String;"); packageName = AndroidJNI.CallStringMethod(obj_Activity.GetRawObject(), method_getPackageName, new jvalue[0]); } } } catch (Exception e) { Debug.Log(e.ToString()); } return(packageName); }
private void UpdateBleDevice(IntPtr device) { if (device == IntPtr.Zero) { return; } AndroidJNI.PushLocalFrame(64); var blitMethod = AndroidJNI.GetMethodID(bleDeviceCls, "blit", "()V"); var getAddrMethod = AndroidJNI.GetMethodID(bleDeviceCls, "getAddress", "()Ljava/lang/String;"); var readNumMethod = AndroidJNI.GetMethodID(bleDeviceCls, "getReadNum", "()I"); var getCharacteristicMethod = AndroidJNI.GetMethodID(bleDeviceCls, "getCharacteristicFromReadData", "(I)Ljava/lang/String;"); var getServiceUuidMethod = AndroidJNI.GetMethodID(bleDeviceCls, "getServiceUuidFromReadData", "(I)Ljava/lang/String;"); var isNotifyMethod = AndroidJNI.GetMethodID(bleDeviceCls, "isNotifyReadData", "(I)Z"); var getReadDataMethod = AndroidJNI.GetMethodID(bleDeviceCls, "getDataFromReadData", "(I)[B"); string addr = AndroidJNI.CallStringMethod(device, getAddrMethod, null); this.UpdateCharastricsKeys(addr, device); // read Charastrics Data AndroidJNI.CallVoidMethod(device, blitMethod, null); int readNum = AndroidJNI.CallIntMethod(device, readNumMethod, null); for (int i = 0; i < readNum; ++i) { this.argBuilder.Clear().Append(ArgJvalueBuilder.GenerateJvalue(i)); string serviceUuid = AndroidJNI.CallStringMethod(device, getServiceUuidMethod, argBuilder.Build()); string charastristic = AndroidJNI.CallStringMethod(device, getCharacteristicMethod, argBuilder.Build()); bool isNotify = AndroidJNI.CallBooleanMethod(device, isNotifyMethod, argBuilder.Build()); var dataObj = AndroidJNI.CallObjectMethod(device, getReadDataMethod, argBuilder.Build()); var sbytes = AndroidJNI.FromSByteArray(dataObj); var characteristicData = new BleCharacteristicData(addr, serviceUuid, charastristic, sbytes, isNotify); this.readDatas.Add(characteristicData); } AndroidJNI.PopLocalFrame(IntPtr.Zero); }