private static void PrepareJNI(object[] input, out jvalue[] output, string ret, out string sig) { refKeep.Clear(); StringBuilder signature = new StringBuilder(); signature.Append("("); output = new jvalue[input.Length]; int x; for (x = 0; x < input.Length; x++) { object obj = input[x]; if (obj.GetType() == typeof(string)) { AndroidJavaObject objn = new AndroidJavaObject("java.lang.String", (string)obj); output[x].l = objn.GetRawObject(); signature.Append("Ljava/lang/String;"); refKeep.Add(objn); } else if (obj.GetType() == typeof(int)) { output[x].i = (int)obj; signature.Append("I"); } else if (obj.GetType() == typeof(bool)) { output[x].z = (bool)obj; signature.Append("Z"); } else if (obj == ACTIVITY) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic <AndroidJavaObject>("currentActivity"); output[x].l = currentActivity.GetRawObject(); signature.Append("Landroid/app/Activity;"); refKeep.Add(currentActivity); } else if (obj == CONTEXT) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = jc.GetStatic <AndroidJavaObject>("currentActivity"); output[x].l = currentActivity.GetRawObject(); signature.Append("Landroid/content/Context;"); refKeep.Add(currentActivity); } else { throw new Exception("Invalid JNI parameter type"); } } signature.Append(")"); signature.Append(ret); sig = signature.ToString(); }
private static void AndroidRelease() { var j_activity = class_UnityPlayer.GetStatic <AndroidJavaObject> ("currentActivity"); jvalue[] args = new jvalue[1]; args [0].l = j_activity.GetRawObject(); AndroidJNI.CallStaticVoidMethod(class_UnityDre, method_release, args); }
private static void BurstlyAdWrapper_createInterstitialPlacement(string placementName, string appId, string zoneId) { jvalue[] args = new jvalue[3]; args[0].l = AndroidJNI.NewStringUTF(placementName); args[1].l = AndroidJNI.NewStringUTF(appId); args[2].l = AndroidJNI.NewStringUTF(zoneId); AndroidJNI.CallStaticVoidMethod(BurstlyPluginClass, methodID_createInterstitialPlacement, args); }
private static void BurstlyAdWrapper_setBannerOrigin(string placementName, float originX, float originY) { jvalue[] args = new jvalue[3]; args[0].l = AndroidJNI.NewStringUTF(placementName); args[1].f = originX; args[2].f = originY; AndroidJNI.CallStaticVoidMethod(BurstlyPluginClass, methodID_setBannerOrigin, args); }
static bool AndroidShowV4VC(bool popup_result, string zone_id) { jvalue[] args = new jvalue[2]; args[0].z = popup_result; args[1].l = AndroidJNI.NewStringUTF(zone_id); AndroidJNI.CallStaticBooleanMethod(class_UnityADC, method_showV4VC, args); return(true); }
public static string GetV4VCName(string zone_id) { jvalue[] args = new jvalue[1]; args[0].l = AndroidJNI.NewStringUTF(zone_id); string name = AndroidJNI.CallStaticStringMethod(class_UnityADC, method_getV4VCName, args); return(name); }
jvalue ConvertFloatArrayToJNI(float[] values) { IntPtr jAryPtr = AndroidJNIHelper.ConvertToJNIArray(values); jvalue jv = new jvalue(); jv.l = jAryPtr; return(jv); }
/// <summary> /// Initializes a new instance of the <see cref="CacheEvent" /> class. /// </summary> /// <param name="regionPath">Cache region path.</param> /// <param name="key">Cache key as <see cref="T:System.Int32" /></param> /// <param name="eventType"><see cref="T:TcmCDService.CacheTypes.CacheEventType" /></param> public CacheEvent(string regionPath, int key, CacheEventType eventType) : base(JNIHandle.NULL) { jvalue[] args = new jvalue[3]; using (JavaMethodArguments arguments = new JavaMethodArguments(args).Add(regionPath).Add(new Java.Lang.Integer(key)).Add((int)eventType)) { base.JObject = (long)mConstructor.CallObject(this, arguments); } }
public static void AndroidPause() { var j_activity = class_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); jvalue[] args = new jvalue[1]; args[0].l = j_activity.GetRawObject(); AndroidJNI.CallStaticVoidMethod(class_UnityADC, method_pause, args); }
public static jvalue[] createJavaParam(params IntPtr[] jparams) { jvalue[] jret = new jvalue[jparams.Length]; for (int i = 0; i < jparams.Length; i++) { jret [i].l = jparams [i]; } return(jret); }
/// <summary> /// Unexports a previously exported object /// </summary> /// <param name="obj"><see cref="T:Java.Lang.Object" /></param> /// <param name="force">if set to <c>true</c> [force unexport].</param> /// <returns><c>true</c> if unexported, otherwise <c>false</c>.</returns> public static bool UnexportObject(JuggerNETProxyObject javaProxyObject, bool force) { jvalue[] args = new jvalue[2]; using (JavaMethodArguments arguments = new JavaMethodArguments(args).Add(javaProxyObject).Add(force)) { return(mUnexportObject.CallBool(null, arguments)); } }
/// <summary> /// Initializes a new instance of the <see cref="RMICacheChannelConnector"/> class. /// </summary> /// <param name="host">Tridion Cache Channel RMI Host</param> /// <param name="port">Tridion Cache Channel RMI Port</param> /// <param name="instanceIdentifier">Tridion Instance identifier.</param> public RMICacheChannelConnector(String host, int port, String instanceIdentifier) : base(JNIHandle.NULL) { jvalue[] args = new jvalue[3]; using (JavaMethodArguments arguments = new JavaMethodArguments(args).Add(host).Add(port).Add(instanceIdentifier)) { base.JObject = (long)mConstructor2.CallObject(this, arguments); } }
/// <summary> /// Unexports a previously exported object /// </summary> /// <param name="obj"><see cref="T:Java.Lang.Object" /></param> /// <param name="force">if set to <c>true</c> [force unexport].</param> /// <returns><c>true</c> if unexported, otherwise <c>false</c>.</returns> public static bool UnexportObject(JuggerNETProxyObject javaProxyObject, bool force) { jvalue[] args = new jvalue[2]; using (JavaMethodArguments arguments = new JavaMethodArguments(args).Add(javaProxyObject).Add(force)) { return mUnexportObject.CallBool(null, arguments); } }
static void AndroidNotifyIAPComplete(string zone_id, string trans_id, string currency_code, double price) { jvalue[] args = new jvalue[4]; args[0].l = AndroidJNI.NewStringUTF(zone_id); args[1].l = AndroidJNI.NewStringUTF(trans_id); args[2].l = AndroidJNI.NewStringUTF(currency_code); args[3].d = price; AndroidJNI.CallStaticVoidMethod(class_UnityADC, method_notifyIAPComplete, args); }
/** * Show the Swarm Leaderboards screen in a pop up. */ public static void showLeaderboards() { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[0]; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, showLeaderboardsMethod, args); #endif #endif }
static void AndroidSetCustomID(string custom_id) { if (!adr_initialized) { AndroidInitializePlugin(); } jvalue[] args = new jvalue[1]; args[0].l = AndroidJNI.NewStringUTF(custom_id); AndroidJNI.CallStaticVoidMethod(class_UnityADC, method_setCustomID, args); }
public void UpdateUserAccount() { if (this.androidBridge == IntPtr.Zero) { UnityEngine.Debug.LogError("androidBridge is null, UpdateUserAccount down failed!"); return; } jvalue[] args = new jvalue[0]; AndroidJNI.CallVoidMethod(this.androidBridge, QGameKitAndroidBridge.notifyUserAccountMethodID, args); }
public bool StopLiveBroadcast() { if (this.androidBridge == IntPtr.Zero) { UnityEngine.Debug.LogError("androidBridge is null, stop liveBroadcast failed!"); return(false); } jvalue[] args = new jvalue[0]; return(AndroidJNI.CallBooleanMethod(this.androidBridge, QGameKitAndroidBridge.stopLiveBroadcastMethodID, args)); }
public void TearDown() { if (this.androidBridge == IntPtr.Zero) { UnityEngine.Debug.LogError("androidBridge is null, tear down failed!"); return; } jvalue[] args = new jvalue[0]; AndroidJNI.CallVoidMethod(this.androidBridge, QGameKitAndroidBridge.tearDownMethodID, args); }
public bool IsLiveBroadcastSupported() { if (this.androidBridge == IntPtr.Zero) { UnityEngine.Debug.LogError("androidBridge is null, cann't get liveBroadcast support!"); return(false); } jvalue[] args = new jvalue[0]; return(AndroidJNI.CallBooleanMethod(this.androidBridge, QGameKitAndroidBridge.isLiveBroadcastSupportedMethodID, args)); }
/** * Enable notification popups (i.e, popups shown when a score is submitted, an achievement is earned, etc.) */ public static void enableNotificationPopups() { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[0]; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, enableNotificationPopupsMethod, args); #endif #endif }
/** * Enable alternative market compatibility (example: Amazon Marketplace). Calling this function make * your game or app compatible with the requirements for launching on non-google play markets. */ public static void enableAlternativeMarketCompatability() { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[0]; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, enableAlternativeMarketCompatabilityMethod, args); #endif #endif }
private void CaptureFrame(int textureID) { if (capturingObject == IntPtr.Zero) { return; } jvalue[] args = new jvalue[1]; args[0].i = textureID; AndroidJNI.CallVoidMethod(capturingObject, captureFrameMethodID, args); }
/// <summary> /// Add extended data to the intent. The name must include a package /// prefix, for example the app com.UnityAndroidNative.contacts would use names /// like "com.android.contacts.ShowAll". /// </summary> /// <param name="name">The name of the extra data, with package prefix.</param> /// <param name="value">The Parcelable[] data value.</param> /// <returns>Returns the same Intent object, for chaining multiple calls</returns> /// <seealso cref="PutExtras"/> /// <seealso cref="RemoveExtra"/> /// <seealso cref="getParcelableArrayExtra(string) "/> public Intent PutExtra(string name, Parcelable[] value) { IntPtr methodId = AndroidJNIHelper.GetMethodID(mClass, "putExtra", "(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;", false); jvalue[] jArgs = new jvalue[2]; jArgs[0].l = AndroidJNI.NewStringUTF(name); jArgs[1].l = ConvertToJNIArray <Intent>(value); AndroidJNI.CallObjectMethod(RawObject, methodId, jArgs); return(this); }
// --------------------------------------------------------------------------------------------------- public static string GetDCIMPath() { IntPtr classID = AndroidJNI.FindClass("com/intel/inde/mp/samples/unity/Capturing"); // com.intel.inde.mp.samples.unity // com/intel/penelope/Capturing IntPtr getDirectoryDCIMMethodID = AndroidJNI.GetStaticMethodID(classID, "getDirectoryDCIM", "()Ljava/lang/String;"); jvalue[] args = new jvalue[0]; string videoDir = AndroidJNI.CallStaticStringMethod(classID, getDirectoryDCIMMethodID, args); return(videoDir); }
/** * Consume the item with the requested id number. * * @param itemId The id number of the item to consume. */ public static void consumeItem(int itemId) { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[1]; args[0].i = itemId; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, consumeItemMethod, args); #endif #endif }
/** * Display the leaderboard with the specified Id number. * * @param leadeboardId The Id number of the leaderboard you want to display. */ public static void showLeaderboard(int leaderboardId) { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[1]; args[0].i = leaderboardId; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, showLeaderboardMethod, args); #endif #endif }
/** * Unlock an achievement using the achievement Id number and immediately show the achievements list * * @param achievementId The Id number of the achievement to unlock. */ public static void unlockAchievementAndShowAchievements(int achievementID) { #if UNITY_ANDROID #if !UNITY_EDITOR jvalue[] args = new jvalue[1]; args[0].i = achievementID; AndroidJNI.CallStaticVoidMethod(swarmUnityInterface, unlockAndShowMethod, args); #endif #endif }
/// <summary> /// 从Asset中拷贝lua文件 /// </summary> /// <param name="path">目录路径.</param> private void copyLuaFileFromAsset(string path) { AndroidJavaObject currentActivity = getCurrentActivity(); AndroidJavaObject assetManager = currentActivity.Call <AndroidJavaObject> ("getAssets", new object[0]); string[] subpaths = assetManager.Call <string[]> ("list", path); if (subpaths.Length > 0) { //当前path为目录 foreach (string subpath in subpaths) { copyLuaFileFromAsset(string.Format("{0}{1}/", path, subpath)); } } else { //当前path为文件 string fileName = path.Substring(0, path.Length - 1); if (fileName.ToLower().EndsWith(".lua")) { //为lua文件,则进行拷贝 string destFilePath = getLuaCacheFilePath(fileName); AndroidJavaObject inputStream = assetManager.Call <AndroidJavaObject>("open", fileName); using (MemoryStream ms = new MemoryStream()) { try { IntPtr buffer = AndroidJNI.NewByteArray(1024); jvalue[] args = new jvalue[1]; args[0].l = buffer; IntPtr readMethodId = AndroidJNIHelper.GetMethodID(inputStream.GetRawClass(), "read", "([B)I"); int hasRead = 0; while ((hasRead = AndroidJNI.CallIntMethod(inputStream.GetRawObject(), readMethodId, args)) != -1) { byte[] byteArray = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(buffer); ms.Write(byteArray, 0, hasRead); } ms.Seek(0, SeekOrigin.Begin); byte[] bytes = new byte[ms.Length]; ms.Read(bytes, 0, bytes.Length); File.WriteAllBytes(destFilePath, bytes); } finally { ms.Close(); } } } } }
private static void BurstlyAdWrapper_createBannerPlacement(string placementName, string appId, string zoneId, float originX, float originY, float width, float height) { jvalue[] args = new jvalue[7]; args[0].l = AndroidJNI.NewStringUTF(placementName); args[1].l = AndroidJNI.NewStringUTF(appId); args[2].l = AndroidJNI.NewStringUTF(zoneId); args[3].f = originX; args[4].f = originY; args[5].f = width; args[6].f = height; AndroidJNI.CallStaticVoidMethod(BurstlyPluginClass, methodID_createBannerPlacement, args); }
public static jvalue GenerateJvalue(byte[] bin, int length) { jvalue arg = new jvalue(); var ptr = AndroidJNI.NewSByteArray(length); for (int i = 0; i < length; ++i) { AndroidJNI.SetSByteArrayElement(ptr, i, unchecked ((sbyte)bin[i])); } arg.l = ptr; return(arg); }
public CacheInvalidatorCallback(ICacheInvalidator cacheInvalidator) { _invalidator = cacheInvalidator; _callback = new GenericCallback((out int return_type, out jvalue return_value, IntPtr input) => { try { string key = (string)JavaClass.GetTypedInstance(typeof(string), jvalue.From(input).l); _invalidator.Invalidate(key); return_value = new jvalue(); return_type = 0; } catch (Exception exception) { return_value = jvalue.CreateCBRetVal(exception); return_type = 1; } return 0; }); base.JObject = _constructor.construct(0, _callback); }
internal static jobject CallNonvirtualObjectMethodA(JNIEnv* pEnv, jobject obj, jclass clazz, jmethodID methodID, jvalue* args) { return pEnv->MakeLocalRef(InvokeHelper(pEnv, obj, methodID, args, true)); }
internal static jlong CallLongMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, false); if(o != null) { return (jlong)(long)o; } return 0; }
internal static void CallVoidMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { InvokeHelper(pEnv, obj, methodID, args, false); }
internal static jchar CallCharMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, false); if(o != null) { return (jchar)(char)o; } return 0; }
internal static jint CallIntMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, false); if(o != null) { return (jint)(int)o; } return 0; }
public static char CallCharMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
internal static jbyte CallByteMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, false); if(o != null) { return (jbyte)(byte)o; } return 0; }
internal static jfloat CallStaticFloatMethodA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { object o = InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false); if(o != null) { return (jfloat)(float)o; } return 0; }
internal static void CallStaticVoidMethodA(JNIEnv* pEnv, jclass cls, jmethodID methodID, jvalue * args) { InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false); }
internal static jdouble CallNonvirtualDoubleMethodA(JNIEnv* pEnv, jobject obj, jclass clazz, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, true); if(o != null) { return (jdouble)(double)o; } return 0; }
internal static jobject CallStaticObjectMethodA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { return pEnv->MakeLocalRef(InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false)); }
public static void CallVoidMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
public static short CallShortMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
public static float CallFloatMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
internal static jboolean CallNonvirtualBooleanMethodA(JNIEnv* pEnv, jobject obj, jclass clazz, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, true); if(o != null) { return ((bool)o) ? JNI_TRUE : JNI_FALSE; } return JNI_FALSE; }
public static long CallLongMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
internal static jfloat CallNonvirtualFloatMethodA(JNIEnv* pEnv, jobject obj, jclass clazz, jmethodID methodID, jvalue* args) { object o = InvokeHelper(pEnv, obj, methodID, args, true); if(o != null) { return (jfloat)(float)o; } return 0; }
public static byte CallByteMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}
internal static void CallNonvirtualVoidMethodA(JNIEnv* pEnv, jobject obj, jclass clazz, jmethodID methodID, jvalue* args) { InvokeHelper(pEnv, obj, methodID, args, true); }
private static object InvokeHelper(JNIEnv* pEnv, jobject objHandle, jmethodID methodID, jvalue* pArgs, bool nonVirtual) { ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); object obj = UnwrapRef(env, objHandle); MethodWrapper mw = MethodWrapper.FromCookie(methodID); mw.Link(); mw.ResolveMethod(); TypeWrapper[] argTypes = mw.GetParameters(); object[] args = new object[argTypes.Length + (mw.HasCallerID ? 1 : 0)]; for (int i = 0; i < argTypes.Length; i++) { TypeWrapper type = argTypes[i]; if (type == PrimitiveTypeWrapper.BOOLEAN) args[i] = pArgs[i].z != JNI_FALSE; else if (type == PrimitiveTypeWrapper.BYTE) args[i] = (byte)pArgs[i].b; else if (type == PrimitiveTypeWrapper.CHAR) args[i] = (char)pArgs[i].c; else if (type == PrimitiveTypeWrapper.SHORT) args[i] = pArgs[i].s; else if (type == PrimitiveTypeWrapper.INT) args[i] = pArgs[i].i; else if (type == PrimitiveTypeWrapper.LONG) args[i] = pArgs[i].j; else if (type == PrimitiveTypeWrapper.FLOAT) args[i] = pArgs[i].f; else if (type == PrimitiveTypeWrapper.DOUBLE) args[i] = pArgs[i].d; else args[i] = argTypes[i].GhostWrap(UnwrapRef(env, pArgs[i].l)); } if (mw.HasCallerID) { args[args.Length - 1] = env.callerID; } try { if (nonVirtual && mw.RequiresNonVirtualDispatcher) { return InvokeNonVirtual(env, mw, obj, args); } if (mw.IsConstructor) { if (obj == null) { return mw.CreateInstance(args); } else { MethodBase mb = mw.GetMethod(); if (mb.IsStatic) { // we're dealing with a constructor on a remapped type, if obj is supplied, it means // that we should call the constructor on an already existing instance, but that isn't // possible with remapped types throw new NotSupportedException(string.Format("Remapped type {0} doesn't support constructor invocation on an existing instance", mw.DeclaringType.Name)); } else if (!mb.DeclaringType.IsInstanceOfType(obj)) { // we're trying to initialize an existing instance of a remapped type throw new NotSupportedException("Unable to partially construct object of type " + obj.GetType().FullName + " to type " + mb.DeclaringType.FullName); } } } return mw.Invoke(obj, args); } catch (Exception x) { SetPendingException(pEnv, ikvm.runtime.Util.mapException(x)); return null; } }
internal static jboolean CallStaticBooleanMethodA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { object o = InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false); if(o != null) { return ((bool)o) ? JNI_TRUE : JNI_FALSE; } return JNI_FALSE; }
private static object InvokeHelper(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue *args, bool nonVirtual) { ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); MethodWrapper mw = MethodWrapper.FromCookie(methodID); TypeWrapper[] argTypes = mw.GetParameters(); object[] argarray = new object[argTypes.Length]; for (int i = 0; i < argarray.Length; i++) { TypeWrapper type = argTypes[i]; if (type == PrimitiveTypeWrapper.BOOLEAN) argarray[i] = java.lang.Boolean.valueOf(args[i].z != JNI_FALSE); else if (type == PrimitiveTypeWrapper.BYTE) argarray[i] = java.lang.Byte.valueOf((byte)args[i].b); else if (type == PrimitiveTypeWrapper.CHAR) argarray[i] = java.lang.Character.valueOf((char)args[i].c); else if (type == PrimitiveTypeWrapper.SHORT) argarray[i] = java.lang.Short.valueOf(args[i].s); else if (type == PrimitiveTypeWrapper.INT) argarray[i] = java.lang.Integer.valueOf(args[i].i); else if (type == PrimitiveTypeWrapper.LONG) argarray[i] = java.lang.Long.valueOf(args[i].j); else if (type == PrimitiveTypeWrapper.FLOAT) argarray[i] = java.lang.Float.valueOf(args[i].f); else if (type == PrimitiveTypeWrapper.DOUBLE) argarray[i] = java.lang.Double.valueOf(args[i].d); else argarray[i] = UnwrapRef(env, args[i].l); } try { return mw.InvokeJNI(UnwrapRef(env, obj), argarray, nonVirtual, env.callerID); } catch(java.lang.reflect.InvocationTargetException x) { SetPendingException(pEnv, ikvm.runtime.Util.mapException(x.getCause())); return null; } catch(Exception x) { SetPendingException(pEnv, ikvm.runtime.Util.mapException(x)); return null; } }
internal static jdouble CallStaticDoubleMethodA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { object o = InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false); if(o != null) { return (jdouble)(double)o; } return 0; }
internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) { TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz)); if(!wrapper.IsAbstract && wrapper.TypeAsBaseType.IsAbstract) { // static newinstance helper method return pEnv->MakeLocalRef(InvokeHelper(pEnv, IntPtr.Zero, methodID, args, false)); } jobject obj = AllocObjectImpl(pEnv, wrapper); if(obj != IntPtr.Zero) { InvokeHelper(pEnv, obj, methodID, args, false); if(ExceptionCheck(pEnv) == JNI_TRUE) { DeleteLocalRef(pEnv, obj); obj = IntPtr.Zero; } } return obj; }
internal static jobject CallObjectMethodA(JNIEnv* pEnv, jobject obj, jmethodID methodID, jvalue* args) { return pEnv->MakeLocalRef(InvokeHelper(pEnv, obj, methodID, args, false)); }
public static double CallDoubleMethod(IntPtr obj, IntPtr methodID, jvalue[] args){}