Exemplo n.º 1
0
        /// <summary>
        /// 注册Android类的方法.
        /// </summary>
        /// <param name="className">Class name.</param>
        /// <param name="methodName">Method name.</param>
        /// <param name="signature">Signature.</param>
        public void RegisterStaticMethod(string className, string methodName, string signature)
        {
            #if UNITY_USE_ANDROIDCALL
            AndroidCallStaticClassObject classObj      = null;
            Dictionary <string, IntPtr>  signatureDict = null;

            if (_classDict.ContainsKey(className))
            {
                classObj = _classDict [className];
                if (classObj.methodDict != null && classObj.methodDict.ContainsKey(methodName))
                {
                    signatureDict = classObj.methodDict [methodName];
                    if (signatureDict.ContainsKey(signature))
                    {
                        return;
                    }
                }
            }

            AndroidJavaClass jclass = null;

            if (classObj != null)
            {
                jclass = classObj.javaClass;
            }
            else
            {
                jclass = new AndroidJavaClass(className);
            }

            IntPtr methodID = AndroidJNIHelper.GetMethodID(jclass.GetRawClass(), methodName, signature, true);
            if (methodID == IntPtr.Zero)
            {
                return;
            }

            if (classObj == null)
            {
                classObj           = new AndroidCallStaticClassObject();
                classObj.javaClass = jclass;
                _classDict.Add(className, classObj);
            }

            if (signatureDict == null)
            {
                if (classObj.methodDict == null)
                {
                    classObj.methodDict = new Dictionary <string, Dictionary <string, IntPtr> > ();
                }
                signatureDict = new Dictionary <string, IntPtr> ();
                classObj.methodDict.Add(methodName, signatureDict);
            }

            signatureDict.Add(signature, methodID);
            #endif
        }
Exemplo n.º 2
0
 /// <summary>
 /// 注册Android类.
 /// </summary>
 /// <param name="className">Class name.</param>
 public void RegisterClass(string className)
 {
     #if UNITY_USE_ANDROIDCALL
     if (!_classDict.ContainsKey(className))
     {
         AndroidJavaClass             jclass   = new AndroidJavaClass(className);
         AndroidCallStaticClassObject classObj = new AndroidCallStaticClassObject();
         classObj.javaClass = jclass;
         _classDict.Add(className, classObj);
     }
     #endif
 }
Exemplo n.º 3
0
        /// <summary>
        /// 注销Android类的所有方法,但不注销此Android类。
        /// </summary>
        /// <param name="className">Class name.</param>
        public void UnregisterStaticMethod(string className)
        {
            #if UNITY_USE_ANDROIDCALL
            AndroidCallStaticClassObject classObj = null;

            if (_classDict.ContainsKey(className))
            {
                classObj = _classDict [className];
                if (classObj.methodDict != null)
                {
                    classObj.methodDict.Clear();
                }
            }
            #endif
        }
Exemplo n.º 4
0
        private IntPtr GetRegisteredStaticMethod(string className, string methodName, string signature)
        {
            AndroidCallStaticClassObject classObj      = null;
            Dictionary <string, IntPtr>  signatureDict = null;

            if (_classDict.ContainsKey(className))
            {
                classObj = _classDict [className];
                if (classObj.methodDict != null && classObj.methodDict.ContainsKey(methodName))
                {
                    signatureDict = classObj.methodDict [methodName];
                    if (signatureDict.ContainsKey(signature))
                    {
                        return(signatureDict [signature]);
                    }
                }
            }
            return(IntPtr.Zero);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 注销Android类的方法.
        /// </summary>
        /// <param name="className">Class name.</param>
        /// <param name="methodName">Method name.</param>
        /// <param name="signature">Signature.</param>
        public void UnregisterStaticMethod(string className, string methodName, string signature)
        {
            #if UNITY_USE_ANDROIDCALL
            AndroidCallStaticClassObject classObj      = null;
            Dictionary <string, IntPtr>  signatureDict = null;

            if (_classDict.ContainsKey(className))
            {
                classObj = _classDict [className];
                if (classObj.methodDict != null && classObj.methodDict.ContainsKey(methodName))
                {
                    signatureDict = classObj.methodDict [methodName];
                    if (signatureDict.ContainsKey(signature))
                    {
                        signatureDict.Remove(signature);
                    }
                }
            }
            #endif
        }