Exemple #1
0
    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");
    }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
    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
    }
Exemple #6
0
        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
        }
Exemple #7
0
        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);
            }
        }
Exemple #8
0
        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);
            }
        }
Exemple #10
0
        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();
     }
 }
Exemple #14
0
 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] {
     });
 }
Exemple #15
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));
        }
Exemple #16
0
        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));
            }
        }
Exemple #17
0
        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);
        }
Exemple #18
0
 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);
        });
    }
Exemple #20
0
        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));
            }
        }
Exemple #21
0
    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]));
    }
Exemple #23
0
        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));
        }
Exemple #24
0
 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] {
     });
 }
Exemple #25
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));
        }
Exemple #26
0
        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);
        }
Exemple #27
0
        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);
        }