public Object ObjectCallAutoResolve(string name, params object[] args) { IntPtr value = ObjectCall(name, GetClass().Replace('.', '/'), args); if (value == IntPtr.Zero) { return(null); } var clsname = new Object(value).GetClass().GetName(); var t = GetCsharpClass(clsname); if (t == null) { return(null); } ConstructorInfo c = t.GetConstructor(new[] { value.GetType() }); if (c != null) { return((Object)c.Invoke(new object[] { value })); } else { DebugPrint("Can't instantiate class, probably no constructor with IntPtr arg"); } return(null); }
public static string GetSignature <TReturnType>(object[] args) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(GetArgsSignature(args)); var t = typeof(TReturnType); if (t.IsSubclassOf(typeof(JavaObject))) { // TODO: [optimization] using (JavaObject androidJavaObject = new Object(FindClass(GetClass(t)))) stringBuilder.Append("L" + androidJavaObject.Call <string>("getName") + ";"); } else { stringBuilder.Append(AndroidJNIHelper.GetSignature(t)); } string sig = stringBuilder.ToString(); DebugPrint("GetSignature<" + t.FullName + ">" + ": " + sig); return(sig); }