public void ShowPage(ZapicPages page) { using (var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (var gameActivityObject = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity")) using (var pageObject = new AndroidJavaObject("java.lang.String", page.ToString().ToLower())) using (var zapicClass = new AndroidJavaClass("com.zapic.sdk.android.Zapic")) { var methodId = AndroidJNI.GetStaticMethodID( zapicClass.GetRawClass(), "showPage", "(Landroid/app/Activity;Ljava/lang/String;)V"); var objectArray = new object[2]; var argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { argArray[0].l = gameActivityObject.GetRawObject(); argArray[1].l = pageObject.GetRawObject(); AndroidJNI.CallStaticVoidMethod(zapicClass.GetRawClass(), methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } } }
private void hapticFeedbackWave(long[] times) { var jVibratorService = new AndroidJavaClass("android.content.Context").GetStatic <string>("VIBRATOR_SERVICE"); var jVibrator = jCurrentActivity.Call <AndroidJavaObject>("getSystemService", jVibratorService); if (apiLevel >= 26) { var jEffectCls = new AndroidJavaClass("android.os.VibrationEffect"); IntPtr jTimes = AndroidJNI.ToLongArray(times); jvalue[] jParams1 = new jvalue[2]; jParams1[0].l = jTimes; jParams1[1].i = -1; IntPtr jmidCreateWaveForm = AndroidJNIHelper.GetMethodID(jEffectCls.GetRawClass(), "createWaveform", "([JI)Landroid/os/VibrationEffect;", true); var jEffect = AndroidJNI.CallStaticObjectMethod(jEffectCls.GetRawClass(), jmidCreateWaveForm, jParams1); IntPtr jmidVibrate = AndroidJNIHelper.GetMethodID(jVibrator.GetRawClass(), "vibrate", "(Landroid/os/VibrationEffect;)V"); jvalue[] jParams2 = new jvalue[2]; jParams2[0].l = jEffect; AndroidJNI.CallVoidMethod(jVibrator.GetRawObject(), jmidVibrate, jParams2); } else { jVibrator.Call("vibrate", times); } }
public static IntPtr CreateInvisibleView() { object[] args = new object[1]; jvalue[] jvalueArray = AndroidJNIHelper.CreateJNIArgArray(args); try { using (AndroidJavaClass class2 = new AndroidJavaClass("com.google.games.bridge.TokenFragment")) { using (AndroidJavaObject obj2 = GetActivity()) { IntPtr methodID = AndroidJNI.GetStaticMethodID(class2.GetRawClass(), "createInvisibleView", "(Landroid/app/Activity;)Landroid/view/View;"); jvalueArray[0].l = obj2.GetRawObject(); return(AndroidJNI.CallStaticObjectMethod(class2.GetRawClass(), methodID, jvalueArray)); } } } catch (Exception exception) { Logger.e("Exception creating invisible view: " + exception.Message); Logger.e(exception.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jvalueArray); } return(IntPtr.Zero); }
public static void Register(string apiKey, bool trackSessions) { // Get the current Activity AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject app = activity.Call <AndroidJavaObject>("getApplicationContext"); jvalue[] args = new jvalue[3] { new jvalue() { l = app.GetRawObject() }, new jvalue() { l = AndroidJNI.NewStringUTF(apiKey) }, new jvalue() { l = (IntPtr)(trackSessions ? 1 : 0) }, }; IntPtr methodId = AndroidJNI.GetStaticMethodID(BugsnagUnity.GetRawClass(), "init", "(Landroid/content/Context;Ljava/lang/String;Z)V"); AndroidJNI.CallStaticVoidMethod(BugsnagUnity.GetRawClass(), methodId, args); registered_ = true; Notify("errorClass", "error message", "error", "", new System.Diagnostics.StackTrace(1, true).ToString(), null, true, ""); }
public static string GetDirectoryName(string directoryType = "DIRECTORY_PICTURES") { AndroidJavaClass environment = new AndroidJavaClass("android.os.Environment"); IntPtr fieldID = AndroidJNI.GetStaticFieldID(environment.GetRawClass(), directoryType, "Ljava/lang/String;"); return(AndroidJNI.GetStaticStringField(environment.GetRawClass(), fieldID)); }
public void InitPlugin() { unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); pluginClass = new AndroidJavaClass("com.TL.openfile.FileOpener"); instancePtr = AndroidJNI.CallStaticObjectMethod(pluginClass.GetRawClass(), AndroidJNI.GetStaticMethodID(pluginClass.GetRawClass(), "instance", "()Lcom/TL/openfile/FileOpener;"), new jvalue[] { }); // currentActivityPtr = AndroidJNI.GetStaticObjectField // ( // unityClass.GetRawClass(), AndroidJNI.GetStaticFieldID // ( // unityClass.GetRawClass(), "currentActivity", "Landroid/app/Activity;" // ) // ); downloadDirectory = AndroidJNI.CallStaticStringMethod ( instancePtr, AndroidJNI.GetMethodID ( pluginClass.GetRawClass(), "GetDownloadDirectory", "()Ljava/lang/String;" ), new jvalue[] { } ); print("DownloadDirectory " + downloadDirectory); downloadDirectory = "/storage/emulated/0/"; print("DownloadDirectory " + downloadDirectory); }
// Must be launched from the game thread (otherwise the classloader cannot locate the unity // java classes we require). private static void LaunchBridgeIntent(IntPtr bridgedIntent) { object[] objectArray = new object[2]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(BridgeActivityClass)) { using (var currentActivity = AndroidTokenClient.GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), LaunchBridgeMethod, LaunchBridgeSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].l = bridgedIntent; AndroidJNI.CallStaticVoidMethod(bridgeClass.GetRawClass(), methodId, jArgs); } } } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
public static IntPtr CreateInvisibleView() { object[] objectArray = new object[1]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(TokenFragmentClass)) { using (var currentActivity = GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), "createInvisibleView", "(Landroid/app/Activity;)Landroid/view/View;"); jArgs[0].l = currentActivity.GetRawObject(); IntPtr view = AndroidJNI.CallStaticObjectMethod(bridgeClass.GetRawClass(), methodId, jArgs); return(view); } } } catch (Exception e) { OurUtils.Logger.e("Exception creating invisible view: " + e.Message); OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } return(IntPtr.Zero); }
// Must be launched from the game thread (otherwise the classloader cannot locate the unity // java classes we require). private static void LaunchBridgeIntent(IntPtr bridgedIntent) { var objectArray = new object[2]; var jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(BridgeActivityClass)) { using (var currentActivity = AndroidTokenClient.GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. var methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), LaunchBridgeMethod, LaunchBridgeSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].l = bridgedIntent; AndroidJNI.CallStaticVoidMethod(bridgeClass.GetRawClass(), methodId, jArgs); } } } catch (Exception e) { GooglePlayGames.OurUtils.Logger.e("Exception launching bridge intent: " + e.Message); GooglePlayGames.OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
internal void DoFetchToken(Action callback) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown object[] array = new object[9]; jvalue[] array2 = AndroidJNIHelper.CreateJNIArgArray(array); try { AndroidJavaClass val = new AndroidJavaClass("com.google.games.bridge.TokenFragment"); try { AndroidJavaObject activity = GetActivity(); try { IntPtr staticMethodID = AndroidJNI.GetStaticMethodID(val.GetRawClass(), "fetchToken", "(Landroid/app/Activity;ZZZLjava/lang/String;Z[Ljava/lang/String;ZLjava/lang/String;)Lcom/google/android/gms/common/api/PendingResult;"); array2[0].l = activity.GetRawObject(); array2[1].z = requestAuthCode; array2[2].z = requestEmail; array2[3].z = requestIdToken; array2[4].l = AndroidJNI.NewStringUTF(webClientId); array2[5].z = forceRefresh; array2[6].l = AndroidJNIHelper.ConvertToJNIArray((Array)oauthScopes.ToArray()); array2[7].z = hidePopups; array2[8].l = AndroidJNI.NewStringUTF(accountName); IntPtr ptr = AndroidJNI.CallStaticObjectMethod(val.GetRawClass(), staticMethodID, array2); PendingResult <TokenResult> pendingResult = new PendingResult <TokenResult>(ptr); pendingResult.setResultCallback(new TokenResultCallback(delegate(int rc, string authCode, string email, string idToken) { this.authCode = authCode; this.email = email; this.idToken = idToken; callback(); })); } finally { ((IDisposable)activity)?.Dispose(); } } finally { ((IDisposable)val)?.Dispose(); } } catch (Exception ex) { Logger.e("Exception launching token request: " + ex.Message); Logger.e(ex.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(array, array2); } }
/// <see cref="ISmartLockCredentialsImpl.Save"/> public void Save(ICredential credential, Action <Status, ICredential> callback) { AndroidJavaClass supportClass = GetSupportClass(); if (supportClass == null) { Debug.LogError("Cannot load java support class: " + SupportActivityClassname); callback(Status.Error, null); return; } AndroidJavaObject unityActivity = GetUnityActivity(); if (unityActivity == null) { Debug.LogError("Cannot get Unity player activity"); callback(Status.Error, null); return; } IntPtr methodId = AndroidJNI.GetStaticMethodID(supportClass.GetRawClass(), "doSave", "(Landroid/app/Activity;" + "Lcom/google/smartlocksupport/SmartLockSupportResponseHandler;" + "Ljava/lang/String;" + "Ljava/lang/String;" + "Ljava/lang/String;" + "Ljava/lang/String;" + "Ljava/lang/String;)V"); if (methodId.Equals(IntPtr.Zero)) { Debug.LogError("Cannot find method doSave in java support class"); callback(Status.Error, null); return; } object[] objectArray = new object[7]; jvalue[] jArgs; LoadCallback cb = new LoadCallback(callback); objectArray[0] = unityActivity; objectArray[1] = cb; objectArray[2] = credential.ID; objectArray[3] = credential.Password; objectArray[4] = credential.AccountType; objectArray[5] = credential.Name; objectArray[6] = credential.ProfilePictureURL; jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); AndroidJNI.CallStaticVoidMethod(supportClass.GetRawClass(), methodId, jArgs); Debug.Log("Done calling doSave"); }
private static ZapicPlayer ConvertPlayer(IntPtr playerPointer) { if (playerPointer == IntPtr.Zero) { return(null); } string notificationToken; string playerId; using (var zapicPlayerClass = new AndroidJavaClass("com.zapic.sdk.android.ZapicPlayer")) { var methodId = AndroidJNI.GetMethodID( zapicPlayerClass.GetRawClass(), "getNotificationToken", "()Ljava/lang/String;"); var objectArray = new object[0]; var argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { notificationToken = AndroidJNI.CallStringMethod(playerPointer, methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } methodId = AndroidJNI.GetMethodID( zapicPlayerClass.GetRawClass(), "getPlayerId", "()Ljava/lang/String;"); objectArray = new object[0]; argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { playerId = AndroidJNI.CallStringMethod(playerPointer, methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } } //TODO: Kyle, use ZapicPlayer constructor // return new ZapicPlayer // { // NotificationToken = notificationToken ?? string.Empty, // PlayerId = playerId ?? string.Empty, // }; return(null); }
internal void DoFetchToken(bool silent, Action <int> callback) { object[] objectArray = new object[10]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(TokenFragmentClass)) { using (var currentActivity = GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), FetchTokenMethod, FetchTokenSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].z = silent; jArgs[2].z = requestAuthCode; jArgs[3].z = requestEmail; jArgs[4].z = requestIdToken; jArgs[5].l = AndroidJNI.NewStringUTF(webClientId); jArgs[6].z = forceRefresh; jArgs[7].l = AndroidJNIHelper.ConvertToJNIArray(oauthScopes.ToArray()); jArgs[8].z = hidePopups; jArgs[9].l = AndroidJNI.NewStringUTF(accountName); IntPtr ptr = AndroidJNI.CallStaticObjectMethod(bridgeClass.GetRawClass(), methodId, jArgs); PendingResult <TokenResult> pr = new PendingResult <TokenResult>(ptr); pr.setResultCallback(new TokenResultCallback((rc, authCode, email, idToken) => { this.authCode = authCode; this.email = email; this.idToken = idToken; callback(rc); })); } } } catch (Exception e) { OurUtils.Logger.e("Exception launching token request: " + e.Message); OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
private void CallAppMetrica(string methodName, IEnumerable <string> types, params object[] args) { IntPtr methodID = AndroidJNIHelper.GetMethodID(_metricaClass.GetRawClass(), methodName, GetSignatureFromTypeNames(types), true); jvalue[] jniArgArray = AndroidJNIHelper.CreateJNIArgArray(args); try { AndroidJNI.CallStaticVoidMethod(_metricaClass.GetRawClass(), methodID, jniArgArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgArray); } }
protected override void SavePhoto(byte[] png, SaveMode mode, int callback) { if (png == null) { return; } natcamextended.CallStatic("setAlbumName", AlbumName); IntPtr jpeg = AndroidJNI.ToByteArray(png); jvalue[] wrapper = new jvalue[3]; wrapper[0].l = jpeg; wrapper[1].i = (int)mode; wrapper[2].i = callback; IntPtr methodID = AndroidJNIHelper.GetMethodID(natcamextended.GetRawClass(), "savePhoto", "([BII)V", true); AndroidJNI.CallStaticVoidMethod(natcamextended.GetRawClass(), methodID, wrapper); }
private void CallAppMetrica(string methodName, string[] types, params object[] args) { var methodID = AndroidJNIHelper.GetMethodID(metricaClass.GetRawClass(), methodName, GetSignatureFromTypeNames(types), true); var jniArgArray = AndroidJNIHelper.CreateJNIArgArray(args); try { AndroidJNI.CallStaticVoidMethod(metricaClass.GetRawClass(), methodID, jniArgArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jniArgArray); } }
/// <summary> /// Initializes a new instance of the Android platform class. /// </summary> /// <param name="targetName">The name of the game object which will receive native callbacks</param> /// <param name="methodName">The method of the game object which will be called from the native code</param> /// <param name="version">Plugin version</param> /// <param name="capacity">Console capacity (elements over this amount will be trimmed)</param> /// <param name="trim">Console trim amount (how many elements will be trimmed on the overflow)</param> /// <param name="gesture">Gesture name to activate the console</param> public PlatformAndroid(string targetName, string methodName, string version, int capacity, int trim, string gesture) { m_pluginClass = new AndroidJavaClass(kPluginClassName); m_pluginClassRaw = m_pluginClass.GetRawClass(); IntPtr methodInit = GetStaticMethod(m_pluginClassRaw, "init", "(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;IILjava.lang.String;)V"); var methodInitParams = new jvalue[] { jval(targetName), jval(methodName), jval(version), jval(capacity), jval(trim), jval(gesture) }; CallStaticVoidMethod(methodInit, methodInitParams); AndroidJNI.DeleteLocalRef(methodInitParams[0].l); AndroidJNI.DeleteLocalRef(methodInitParams[1].l); AndroidJNI.DeleteLocalRef(methodInitParams[2].l); AndroidJNI.DeleteLocalRef(methodInitParams[5].l); m_methodLogMessage = GetStaticMethod(m_pluginClassRaw, "logMessage", "(Ljava.lang.String;Ljava.lang.String;I)V"); m_methodShowConsole = GetStaticMethod(m_pluginClassRaw, "show", "()V"); m_methodHideConsole = GetStaticMethod(m_pluginClassRaw, "hide", "()V"); m_methodClearConsole = GetStaticMethod(m_pluginClassRaw, "clear", "()V"); m_methodRegisterAction = GetStaticMethod(m_pluginClassRaw, "registerAction", "(ILjava.lang.String;)V"); m_methodUnregisterAction = GetStaticMethod(m_pluginClassRaw, "unregisterAction", "(I)V"); m_methodRegisterVariable = GetStaticMethod(m_pluginClassRaw, "registerVariable", "(ILjava.lang.String;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)V"); }
/// <summary> /// Throws one of the exceptions (<c>UserProfileNotFoundException</c> or <c>ProviderNotFoundException</c> if needed. /// </summary> public static void checkExceptions() { IntPtr jException = AndroidJNI.ExceptionOccurred(); if (jException != IntPtr.Zero) { AndroidJNI.ExceptionClear(); AndroidJavaClass jniExceptionClass = new AndroidJavaClass("com.soomla.profile.exceptions.UserProfileNotFoundException"); if (AndroidJNI.IsInstanceOf(jException, jniExceptionClass.GetRawClass())) { Debug.Log("SOOMLA/UNITY Caught UserProfileNotFoundException!"); throw new UserProfileNotFoundException(); } jniExceptionClass.Dispose(); jniExceptionClass = new AndroidJavaClass("com.soomla.profile.exceptions.ProviderNotFoundException"); if (AndroidJNI.IsInstanceOf(jException, jniExceptionClass.GetRawClass())) { Debug.Log("SOOMLA/UNITY Caught ProviderNotFoundException!"); throw new ProviderNotFoundException(); } jniExceptionClass.Dispose(); Debug.Log("SOOMLA/UNITY Got an exception but can't identify it!"); } }
private int[] GifToIntAA(byte[] bytes, int length) { AndroidJavaClass bmf = new AndroidJavaClass("android.graphics.BitmapFactory"); AndroidJavaClass bm = new AndroidJavaClass("android.graphics.Bitmap"); // this bitmapfactory class method returns a Bitmap object AndroidJavaObject bmo = bmf.CallStatic <AndroidJavaObject>("decodeByteArray", new object[] { bytes, 0, length }); // we can figure out the width and height of the gif data int h = bmo.Call <int>("getHeight", new object[] { }); int w = bmo.Call <int>("getWidth", new object[] { }); wh = new Vector2Int(w, h); // set the global wh for offsetment // the trick is getting the pixels without calling the JNI to often i.e. _getPixel()_ // setup java inputs for BitMap.getPixels System.IntPtr pixs = AndroidJNI.NewIntArray(h * w); jvalue[] gpargs; gpargs = new jvalue[7]; gpargs[0].l = pixs; gpargs[1].i = 0; gpargs[2].i = w; gpargs[3].i = 0; gpargs[4].i = 0; gpargs[5].i = w; gpargs[6].i = h; // this is the same as `bmo.getPixels(pixs,0,w,0,0,w,h)` but in raw AndroidJNI calls because pixs is a pointer to an int[] buffer AndroidJNI.CallVoidMethod(bmo.GetRawObject(), AndroidJNI.GetMethodID(bm.GetRawClass(), "getPixels", "([IIIIIII)V"), gpargs); return(AndroidJNI.FromIntArray(pixs)); }
public static bool RunningOnAndroid() { if (detectAndroidJNI == null) { detectAndroidJNI = new AndroidJavaClass("android.os.Build"); } return(detectAndroidJNI.GetRawClass() != IntPtr.Zero); }
private void StartOnUI() { using (var zapicClass = new AndroidJavaClass("com.zapic.sdk.android.Zapic")) { using (var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (var gameActivityObject = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity")) { var methodId = AndroidJNI.GetStaticMethodID( zapicClass.GetRawClass(), "attachFragment", "(Landroid/app/Activity;)V"); var objectArray = new object[1]; var argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { argArray[0].l = gameActivityObject.GetRawObject(); AndroidJNI.CallStaticVoidMethod(zapicClass.GetRawClass(), methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } } if (_authenticationHandler == null) { _authenticationHandler = new ZapicPlayerAuthenticationHandler(this); var methodId = AndroidJNI.GetStaticMethodID( zapicClass.GetRawClass(), "setPlayerAuthenticationHandler", "(Lcom/zapic/sdk/android/ZapicPlayerAuthenticationHandler;)V"); var objectArray = new object[1]; var argArray = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { argArray[0].l = AndroidJNIHelper.CreateJavaProxy(_authenticationHandler); AndroidJNI.CallStaticVoidMethod(zapicClass.GetRawClass(), methodId, argArray); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, argArray); } } } }
internal static void FetchToken(bool fetchAuthCode, bool fetchEmail, bool fetchIdToken, string webClientId, bool forceRefresh, Action <int, string, string, string> callback) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown object[] array = new object[7]; jvalue[] array2 = AndroidJNIHelper.CreateJNIArgArray(array); try { AndroidJavaClass val = new AndroidJavaClass("com.google.games.bridge.TokenFragment"); try { AndroidJavaObject activity = GetActivity(); try { IntPtr staticMethodID = AndroidJNI.GetStaticMethodID(val.GetRawClass(), "fetchToken", "(Landroid/app/Activity;ZZZLjava/lang/String;Z[Ljava/lang/String;ZLjava/lang/String;)Lcom/google/android/gms/common/api/PendingResult;"); array2[0].l = activity.GetRawObject(); array2[1].z = fetchAuthCode; array2[2].z = fetchEmail; array2[3].z = fetchIdToken; array2[4].l = AndroidJNI.NewStringUTF(webClientId); array2[5].z = forceRefresh; IntPtr ptr = AndroidJNI.CallStaticObjectMethod(val.GetRawClass(), staticMethodID, array2); PendingResult <TokenResult> pendingResult = new PendingResult <TokenResult>(ptr); pendingResult.setResultCallback(new TokenResultCallback(callback)); } finally { ((IDisposable)activity)?.Dispose(); } } finally { ((IDisposable)val)?.Dispose(); } } catch (Exception ex) { Logger.e("Exception launching token request: " + ex.Message); Logger.e(ex.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(array, array2); } }
private static string GetAndroidExternalStoragePublicDirectory(string type) { AndroidJavaClass jc = new AndroidJavaClass("android.os.Environment"); IntPtr typeFieldId = AndroidJNI.GetStaticFieldID(jc.GetRawClass(), type, "Ljava/lang/String;"); string typeField = AndroidJNI.GetStaticStringField(jc.GetRawClass(), typeFieldId); IntPtr getExternalStorageDirectoryMethod = AndroidJNI.GetStaticMethodID(jc.GetRawClass(), "getExternalStoragePublicDirectory", "(Ljava/lang/String;)Ljava/io/File;"); jvalue[] args = AndroidJNIHelper.CreateJNIArgArray(new object[] { typeField }); IntPtr file = AndroidJNI.CallStaticObjectMethod(jc.GetRawClass(), getExternalStorageDirectoryMethod, args); IntPtr getPathMethod = AndroidJNI.GetMethodID(AndroidJNI.GetObjectClass(file), "getPath", "()Ljava/lang/String;"); IntPtr path = AndroidJNI.CallObjectMethod(file, getPathMethod, new jvalue[] { }); string pathString = AndroidJNI.GetStringUTFChars(path); AndroidJNI.DeleteLocalRef(file); AndroidJNI.DeleteLocalRef(path); return(pathString); }
internal static void FetchToken(string scope, string rationale, bool fetchEmail, bool fetchAccessToken, bool fetchIdToken, Action <int, string, string, string> callback) { object[] objectArray = new object[6]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(TokenFragmentClass)) { using (var currentActivity = AndroidTokenClient.GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), FetchTokenMethod, FetchTokenSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].l = AndroidJNI.NewStringUTF(rationale); jArgs[2].z = fetchEmail; jArgs[3].z = fetchAccessToken; jArgs[4].z = fetchIdToken; jArgs[5].l = AndroidJNI.NewStringUTF(scope); GooglePlayGames.OurUtils.Logger.d("---->> Calling Fetch: " + methodId + " scope: " + scope); IntPtr ptr = AndroidJNI.CallStaticObjectMethod(bridgeClass.GetRawClass(), methodId, jArgs); GooglePlayGames.OurUtils.Logger.d("<<<------- Got return of " + ptr); PendingResult <TokenResult> pr = new PendingResult <TokenResult>(ptr); pr.setResultCallback(new TokenResultCallback(callback)); } } } catch (Exception e) { GooglePlayGames.OurUtils.Logger.e("Exception launching token request: " + e.Message); GooglePlayGames.OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
public void initSDK() { using (AndroidJavaClass javaClass = new AndroidJavaClass(JAVA_CLASS_NAME)) { if (javaClass.GetRawClass() != IntPtr.Zero) { javaClass.CallStatic("dbGotoInitSDKJNI"); } } }
/// <summary> /// Gets another server auth code. /// </summary> /// <remarks>This method should be called after authenticating, and exchanging /// the initial server auth code for a token. This is implemented by signing in /// silently, which if successful returns almost immediately and with a new /// server auth code. /// </remarks> /// <param name="reAuthenticateIfNeeded">Calls Authenticate if needed when /// retrieving another auth code. </param> /// <param name="callback">Callback.</param> public void GetAnotherServerAuthCode(bool reAuthenticateIfNeeded, Action <string> callback) { object[] objectArray = new object[3]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(TokenFragmentClass)) { using (var currentActivity = GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), GetAnotherAuthCodeMethod, GetAnotherAuthCodeSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].z = reAuthenticateIfNeeded; jArgs[2].l = AndroidJNI.NewStringUTF(webClientId); IntPtr ptr = AndroidJNI.CallStaticObjectMethod(bridgeClass.GetRawClass(), methodId, jArgs); PendingResult <TokenResult> pr = new PendingResult <TokenResult>(ptr); pr.setResultCallback(new TokenResultCallback((rc, authCode, email, idToken) => { this.authCode = authCode; callback(authCode); })); } } } catch (Exception e) { OurUtils.Logger.e("Exception launching auth code request: " + e.Message); OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
internal static void FetchToken(bool fetchAuthCode, bool fetchEmail, bool fetchIdToken, string webClientId, bool forceRefresh, Action <int, string, string, string> callback) { object[] objectArray = new object[7]; jvalue[] jArgs = AndroidJNIHelper.CreateJNIArgArray(objectArray); try { using (var bridgeClass = new AndroidJavaClass(TokenFragmentClass)) { using (var currentActivity = AndroidTokenClient.GetActivity()) { // Unity no longer supports constructing an AndroidJavaObject using an IntPtr, // so I have to manually munge with JNI here. IntPtr methodId = AndroidJNI.GetStaticMethodID(bridgeClass.GetRawClass(), FetchTokenMethod, FetchTokenSignature); jArgs[0].l = currentActivity.GetRawObject(); jArgs[1].z = fetchAuthCode; jArgs[2].z = fetchEmail; jArgs[3].z = fetchIdToken; jArgs[4].l = AndroidJNI.NewStringUTF(webClientId); jArgs[5].z = forceRefresh; IntPtr ptr = AndroidJNI.CallStaticObjectMethod(bridgeClass.GetRawClass(), methodId, jArgs); PendingResult <TokenResult> pr = new PendingResult <TokenResult>(ptr); pr.setResultCallback(new TokenResultCallback(callback)); } } } catch (Exception e) { OurUtils.Logger.e("Exception launching token request: " + e.Message); OurUtils.Logger.e(e.ToString()); } finally { AndroidJNIHelper.DeleteJNIArgArray(objectArray, jArgs); } }
private void StartHummingBirdService() { #if ANDROID_DEVICE try { UnityEngine.AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); javaHummingbirdClass = new AndroidJavaClass("com.picovr.picovrlib.hummingbirdclient.HbClientActivity"); javaCVClass = new AndroidJavaClass("com.picovr.picovrlib.cvcontrollerclient.ControllerClient"); javavractivityclass = new UnityEngine.AndroidJavaClass("com.psmart.vrlib.VrActivity"); javaserviceClass = new AndroidJavaClass("com.picovr.picovrlib.hummingbirdclient.UnityClient"); Pvr_UnitySDKAPI.System.Pvr_SetInitActivity(activity.GetRawObject(), javaHummingbirdClass.GetRawClass()); int enumindex = (int)GlobalIntConfigs.PLATFORM_TYPE; Render.UPvr_GetIntConfig(enumindex, ref platFormType); Debug.Log("PvrLog platform" + platFormType); enumindex = (int)GlobalIntConfigs.TRACKING_MODE; Render.UPvr_GetIntConfig(enumindex, ref trackingmode); Debug.Log("PvrLog trackingmode" + trackingmode); systemProp = GetSysproc(); Debug.Log("PvrLog systemProp" + systemProp); enumindex = (int)GlobalIntConfigs.ENBLE_HAND6DOF_BY_HEAD; Render.UPvr_GetIntConfig(enumindex, ref enablehand6dofbyhead); Debug.Log("PvrLog enablehand6dofbyhead" + enablehand6dofbyhead); if (trackingmode == 0 || trackingmode == 1 || (trackingmode == 3 || trackingmode == 5 || trackingmode == 6) && (systemProp == 1 || systemProp == 3)) { picoDevice = platFormType != 0; javaPico2ReceiverClass = new UnityEngine.AndroidJavaClass("com.picovr.picovrlib.hummingbirdclient.HbClientReceiver"); Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(javaPico2ReceiverClass, "startReceiver", activity, gameobjname); Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(javaHummingbirdClass, "setPlatformType", platFormType); } else { picoDevice = true; SetGameObjectToJar(gameobjname); } Render.UPvr_GetIntConfig((int)GlobalIntConfigs.iPhoneHMDModeEnabled, ref iPhoneHMDModeEnabled); if (iPhoneHMDModeEnabled == 1) { BindService(); } else { if (IsServiceExisted()) { BindService(); } } } catch (AndroidJavaException e) { PLOG.E("ConnectToAndriod--catch" + e.Message); } #endif }
public static bool RunningOnAndroid() { #if UNITY_ANDROID if (detectAndroidJNI == null) { detectAndroidJNI = new AndroidJavaClass("android.os.Build"); } return(detectAndroidJNI.GetRawClass() != IntPtr.Zero); #else return(false); #endif }
/************************************ Public Interfaces **********************************/ #region PublicInterfaces public void ConnectToAndriod() { #if ANDROID_DEVICE try { Debug.Log("PvrLog SDK Version : " + Pvr_UnitySDKAPI.System.UPvr_GetSDKVersion().ToString() + " Unity Script Version :" + Pvr_UnitySDKAPI.System.UPvr_GetUnitySDKVersion().ToString()); UnityEngine.AndroidJavaClass unityPlayer = new UnityEngine.AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic <UnityEngine.AndroidJavaObject>("currentActivity"); javaVrActivityClass = new UnityEngine.AndroidJavaClass("com.psmart.vrlib.VrActivity"); javaserviceClass = new AndroidJavaClass("com.picovr.picovrlib.hummingbirdclient.UnityClient"); javaVrActivityLongReceiver = new UnityEngine.AndroidJavaClass("com.psmart.vrlib.HomeKeyReceiver"); javaSysActivityClass = new UnityEngine.AndroidJavaClass("com.psmart.aosoperation.SysActivity"); javaVrActivityClientClass = new UnityEngine.AndroidJavaClass("com.psmart.vrlib.PvrClient"); Pvr_UnitySDKAPI.System.Pvr_SetInitActivity(activity.GetRawObject(), javaVrActivityClass.GetRawClass()); model = javaVrActivityClass.CallStatic <string>("Pvr_GetBuildModel"); double[] parameters = new double[5]; Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(ref parameters, javaVrActivityClass, "getDPIParameters", activity); int platformType = -1; int enumindex = (int)Pvr_UnitySDKAPI.GlobalIntConfigs.PLATFORM_TYPE; Pvr_UnitySDKAPI.Render.UPvr_GetIntConfig(enumindex, ref platformType); string systemfps = ""; Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod <string>(ref systemfps, javaserviceClass, "getSysproc", "persist.pvr.debug.appfps"); if (systemfps != "") { Pvr_UnitySDKManager.SDK.systemFPS = Convert.ToBoolean(Convert.ToInt16(systemfps)); } if (platformType == 0) { Pvr_UnitySDKAPI.Render.UPvr_ChangeScreenParameters(model, (int)parameters[0], (int)parameters[1], parameters[2], parameters[3], parameters[4]); Screen.sleepTimeout = SleepTimeout.NeverSleep; } if (Pvr_UnitySDKAPI.System.UPvr_IsPicoActivity()) { bool setMonoPresentation = Pvr_UnitySDKAPI.System.UPvr_SetMonoPresentation(); Debug.Log("ConnectToAndriod set monoPresentation success ?-------------" + setMonoPresentation.ToString()); bool isPresentationExisted = Pvr_UnitySDKAPI.System.UPvr_IsPresentationExisted(); Debug.Log("ConnectToAndriod presentation existed ?-------------" + isPresentationExisted.ToString()); } isShellMode = GetIsShellMode(); Debug.Log("ConnectToAndriod isShellMode ?-------------" + isShellMode.ToString()); } catch (AndroidJavaException e) { PLOG.E("ConnectToAndriod--catch" + e.Message); } #endif canConnecttoActivity = true; }