Exemplo n.º 1
0
 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);
 }
Exemplo n.º 4
0
        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, "");
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
 // 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);
     }
 }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        // 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");
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 14
0
    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);
        }
    }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
    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);
        }
    }
Exemplo n.º 17
0
            /// <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");
            }
Exemplo n.º 18
0
        /// <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!");
            }
        }
Exemplo n.º 19
0
    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);
 }
Exemplo n.º 21
0
        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);
     }
 }
Exemplo n.º 23
0
        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);
        }
Exemplo n.º 24
0
        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);
            }
        }
Exemplo n.º 25
0
 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);
            }
        }
Exemplo n.º 27
0
        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);
            }
        }
Exemplo n.º 28
0
    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
    }
Exemplo n.º 29
0
 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
 }
Exemplo n.º 30
0
    /************************************   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;
    }