/// <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 }
/// <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 }
/// <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 }
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); }
/// <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 }