UnityEngine.AndroidJavaProxy.Invoke C# (CSharp) Method

Invoke() public method

Called by the java vm whenever a method is invoked on the java proxy interface. You can override this to run special code on method invokation, or you can leave the implementation as is, and leave the default behavior which is to look for c# methods matching the signature of the java method.

public Invoke ( string methodName, object args ) : AndroidJavaObject
methodName string Name of the invoked java method.
args object Arguments passed from the java vm - converted into AndroidJavaObject, AndroidJavaClass or a primitive.
return AndroidJavaObject
        public virtual AndroidJavaObject Invoke(string methodName, object[] args)
        {
            Exception inner = null;
            BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
            System.Type[] types = new System.Type[args.Length];
            for (int i = 0; i < args.Length; i++)
            {
                types[i] = (args[i] != null) ? args[i].GetType() : typeof(AndroidJavaObject);
            }
            try
            {
                MethodInfo info = base.GetType().GetMethod(methodName, bindingAttr, null, types, null);
                if (info != null)
                {
                    return _AndroidJNIHelper.Box(info.Invoke(this, args));
                }
            }
            catch (TargetInvocationException exception2)
            {
                inner = exception2.InnerException;
            }
            catch (Exception exception3)
            {
                inner = exception3;
            }
            string[] strArray = new string[args.Length];
            for (int j = 0; j < types.Length; j++)
            {
                strArray[j] = types[j].ToString();
            }
            if (inner != null)
            {
                object[] objArray1 = new object[] { base.GetType(), ".", methodName, "(", string.Join(",", strArray), ")" };
                throw new TargetInvocationException(string.Concat(objArray1), inner);
            }
            object[] objArray2 = new object[] { "No such proxy method: ", base.GetType(), ".", methodName, "(", string.Join(",", strArray), ")" };
            throw new Exception(string.Concat(objArray2));
        }

Same methods

AndroidJavaProxy::Invoke ( string methodName, AndroidJavaObject javaArgs ) : AndroidJavaObject

Usage Example

コード例 #1
0
        public static IntPtr InvokeJavaProxyMethod(AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs)
        {
            int num = 0;

            if (jargs != IntPtr.Zero)
            {
                num = AndroidJNISafe.GetArrayLength(jargs);
            }
            AndroidJavaObject[] array = new AndroidJavaObject[num];
            for (int i = 0; i < num; i++)
            {
                IntPtr objectArrayElement = AndroidJNISafe.GetObjectArrayElement(jargs, i);
                array[i] = ((!(objectArrayElement != IntPtr.Zero)) ? null : new AndroidJavaObject(objectArrayElement));
            }
            IntPtr result;

            using (AndroidJavaObject androidJavaObject = proxy.Invoke(AndroidJNI.GetStringUTFChars(jmethodName), array))
            {
                if (androidJavaObject == null)
                {
                    result = IntPtr.Zero;
                }
                else
                {
                    result = AndroidJNI.NewLocalRef(androidJavaObject.GetRawObject());
                }
            }
            return(result);
        }
All Usage Examples Of UnityEngine.AndroidJavaProxy::Invoke