public string[] AddProperties(Dictionary <string, object> value)
        {
            AndroidJavaObject keys = (hsCampaignsApiCallAndReturnObject("addProperties", new object[] { convertToJavaHashMap(value) }));

            string[] keyValues = AndroidJNIHelper.ConvertFromJNIArray <string[]>(keys.GetRawObject());
            return(keyValues);
        }
Beispiel #2
0
        public void onDidReceiveData(AndroidJavaObject dataReceived)
        {
            AndroidJavaObject dataFromAndroid = dataReceived.Get <AndroidJavaObject>("ReceivedData");

            byte[] byteData = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(dataFromAndroid.GetRawObject());
            _syncMessageHandler.OnDidReceiveData(byteData);
        }
Beispiel #3
0
            public void OnGetThumbnail(AndroidJavaObject thumbnailData)
            {
                byte[] data      = null;
                bool   cancelled = false;

                if (thumbnailData != null)
                {
                    AndroidJavaObject dataObject = thumbnailData.Get <AndroidJavaObject>("Data");
                    data = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(dataObject.GetRawObject());
                    if (data.Length == 0)
                    {
                        data = null;
                    }

                    cancelled = thumbnailData.Get <bool>("Cancelled");
                }

                LifecycleManager.Instance.QueueOnUpdateAction(() => {
                    bool isCallbackValid = callback != null;
                    if (isCallbackTargetUnityObject)
                    {
                        isCallbackValid = isCallbackValid && (callback.Target as UnityEngine.Object) != null;
                    }
                    if (isCallbackValid)
                    {
                        callback(filePath, data, cancelled);
                    }
                });
            }
Beispiel #4
0
    public static void ReadSharedURLAndroid(FileStream fileStream)
    {
        using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic <AndroidJavaObject>("currentActivity"))
            using (var intent = activity.Call <AndroidJavaObject>("getIntent"))
                using (var uri = intent.Call <AndroidJavaObject>("getData"))
                    using (var contentResolver = activity.Call <AndroidJavaObject>("getContentResolver"))
                        using (var inputStream = contentResolver.Call <AndroidJavaObject>("openInputStream", uri))
                        {
                            byte[] buffer    = new byte[1024];
                            var    bufferPtr = AndroidJNIHelper.ConvertToJNIArray(buffer);
                            // get the method id of InputStream.read(byte[] b, int off, int len)
                            var      readMethodId = AndroidJNIHelper.GetMethodID(inputStream.GetRawClass(), "read", "([BII)I");
                            jvalue[] args         = new jvalue[3];
                            // construct arguments to pass to InputStream.read
                            args[0].l = bufferPtr;     // buffer
                            args[1].i = 0;             // offset
                            args[2].i = buffer.Length; // length

                            while (true)
                            {
                                int bytesRead = AndroidJNI.CallIntMethod(inputStream.GetRawObject(), readMethodId, args);
                                if (bytesRead <= 0)
                                {
                                    break;
                                }
                                byte[] newBuffer = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(bufferPtr);
                                fileStream.Write(newBuffer, 0, bytesRead);
                            }
                            fileStream.Flush();
                        }
    }
        public static T StaticInvokeObjectCall <T>(string type, string name, string sig, params object[] args)
        {
            IntPtr intPtr         = AndroidJNI.FindClass(type);
            IntPtr staticMethodID = AndroidJNI.GetStaticMethodID(intPtr, name, sig);

            jvalue[]        array       = ConstructArgArray(args);
            IntPtr          intPtr2     = AndroidJNI.CallStaticObjectMethod(intPtr, staticMethodID, array);
            ConstructorInfo constructor = typeof(T).GetConstructor(new Type[1]
            {
                intPtr2.GetType()
            });

            if (constructor != null)
            {
                return((T)constructor.Invoke(new object[1]
                {
                    intPtr2
                }));
            }
            if (typeof(T).IsArray)
            {
                return(AndroidJNIHelper.ConvertFromJNIArray <T>(intPtr2));
            }
            Debug.Log((object)"Trying cast....");
            Type typeFromHandle = typeof(T);

            return((T)Marshal.PtrToStructure(intPtr2, typeFromHandle));
        }
Beispiel #6
0
        public static T StaticInvokeObjectCall <T>(string type, string name, string sig, params object[] args)
        {
            IntPtr num            = AndroidJNI.FindClass(type);
            IntPtr staticMethodId = AndroidJNI.GetStaticMethodID(num, name, sig);

            jvalue[]        jvalueArray = JavaObjWrapper.ConstructArgArray(args);
            IntPtr          ptr         = AndroidJNI.CallStaticObjectMethod(num, staticMethodId, jvalueArray);
            ConstructorInfo constructor = typeof(T).GetConstructor(new Type[1] {
                ptr.GetType()
            });

            if ((object)constructor != null)
            {
                return((T)constructor.Invoke(new object[1] {
                    (object)ptr
                }));
            }
            if (typeof(T).IsArray)
            {
                return(AndroidJNIHelper.ConvertFromJNIArray <T>(ptr));
            }
            Debug.Log((object)"Trying cast....");
            Type structureType = typeof(T);

            return((T)Marshal.PtrToStructure(ptr, structureType));
        }
Beispiel #7
0
        public static Achievments[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaAchievments == null)
            {
                javaUnityApplicasaAchievments = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaAchievments");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaAchievments.CallStatic <AndroidJavaObject[]>("ApplicasaAchievmentsGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            Achievments[] achievmentsInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray      = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                Achievments[]       achievmentstemp = new Achievments[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    achievmentstemp[j] = new Achievments(tempObj.GetRawObject(), tempObj);
                }
                if (achievmentsInner == null)
                {
                    achievmentsInner = achievmentstemp;
                }
                else
                {
                    Achievments[] firstOne = achievmentsInner;
                    achievmentsInner = new Achievments[firstOne.Length + achievmentstemp.Length];
                    firstOne.CopyTo(achievmentsInner, 0);
                    achievmentstemp.CopyTo(achievmentsInner, firstOne.Length);
                }
            }
            return(achievmentsInner);
        }
Beispiel #8
0
        public static User[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaUser == null)
            {
                javaUnityApplicasaUser = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaUser");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaUser.CallStatic <AndroidJavaObject[]>("ApplicasaUserGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            User[] userInner = null;;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                User[] usertemp = new User[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    usertemp[j] = new User(tempObj.GetRawObject(), tempObj);
                }
                if (userInner == null)
                {
                    userInner = usertemp;
                }
                else
                {
                    User[] firstOne = userInner;
                    userInner = new User[firstOne.Length + usertemp.Length];
                    firstOne.CopyTo(userInner, 0);
                    usertemp.CopyTo(userInner, firstOne.Length);
                }
            }
            return(userInner);
        }
        private static List <BluetoothDevice> GetDevices(int type)
        {
            AndroidJavaObject array;

            if (type == 0)
            {
                array = ServiceClass.CallStatic <AndroidJavaObject>("u_getBondedDevices");
            }
            else
            {
                array = ServiceClass.CallStatic <AndroidJavaObject>("u_getDiscoveredDevices");
            }
            List <BluetoothDevice> bondedDevices = new List <BluetoothDevice>();

            if (array.GetRawObject().ToInt32() != 0)
            {
                string[] devices = AndroidJNIHelper.ConvertFromJNIArray <string[]>(array.GetRawObject());
                foreach (string device in devices)
                {
                    string[]        tokens = device.Split(',');
                    BluetoothDevice dev;
                    dev.address = tokens[0];
                    dev.name    = tokens[1];
                    bondedDevices.Add(dev);
                }
            }
            return(bondedDevices);
        }
Beispiel #10
0
            public void onDidReceiveData(AndroidJavaObject dataReceived)
            {
                var dataFromAndroid = dataReceived.Get <AndroidJavaObject>("ReceivedData");
                var byteData        = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(dataFromAndroid.GetRawObject());

                _syncDelegate.OnDidReceiveData(byteData);
            }
Beispiel #11
0
        public static IEnumerator GetFacebookFriendsIEnumerator(FBFriendArray fbFriendArray)
        {
            FBFriend[]          fbFriends = new FBFriend[fbFriendArray.ArraySize];
            AndroidJavaObject[] bigArray  = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(fbFriendArray.Array);

            int count = 0;

            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject   tempJavaObject = bigArray[i];
                AndroidJavaObject[] InnerArray     = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());

                for (int j = 0; j < InnerArray.Length; j++)
                {
                    using (AndroidJavaObject tempObj = InnerArray[j])
                    {
                        fbFriends[count].Id       = tempObj.Get <string>("mFacebookID");
                        fbFriends[count].Name     = tempObj.Get <string>("mFacebookName");
                        fbFriends[count].ImageURL = tempObj.Get <string>("mFacebookImage");
                        bool hasUser = false;
                        hasUser = tempObj.Get <bool>("mHasApplicasaUser");
                        if (hasUser)
                        {
                            AndroidJavaObject tempUserJavaObject = tempObj.Get <AndroidJavaObject>("user");
                            fbFriends[count].UserObj = new User(tempObj.GetRawObject(), tempObj);
                        }
                        count++;
                    }
                }
                yield return(new WaitForSeconds(0.2f));
            }
            FBFriends = fbFriends;
        }
Beispiel #12
0
        public static VirtualGoodCategory[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaVirtualGoodCategory == null)
            {
                javaUnityApplicasaVirtualGoodCategory = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaVirtualGoodCategory");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaVirtualGoodCategory.CallStatic <AndroidJavaObject[]>("ApplicasaVirtualGoodCategoryGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            VirtualGoodCategory[] virtualGoodCategoryInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[]   InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                VirtualGoodCategory[] virtualGoodCategorytemp = new VirtualGoodCategory[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    virtualGoodCategorytemp[j] = new VirtualGoodCategory(tempObj.GetRawObject(), tempObj);
                }
                if (virtualGoodCategoryInner == null)
                {
                    virtualGoodCategoryInner = virtualGoodCategorytemp;
                }
                else
                {
                    VirtualGoodCategory[] firstOne = virtualGoodCategoryInner;
                    virtualGoodCategoryInner = new VirtualGoodCategory[firstOne.Length + virtualGoodCategorytemp.Length];
                    firstOne.CopyTo(virtualGoodCategoryInner, 0);
                    virtualGoodCategorytemp.CopyTo(virtualGoodCategoryInner, firstOne.Length);
                }
            }
            return(virtualGoodCategoryInner);
        }
Beispiel #13
0
        public static byte[] asBytes(this AndroidJavaObject obj)
        {
            var raw = obj.GetRawObject();

            return(raw.ToInt32() == 0
        ? null : AndroidJNIHelper.ConvertFromJNIArray <byte[]>(raw));
        }
Beispiel #14
0
        public static Chat[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaChat == null)
            {
                javaUnityApplicasaChat = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaChat");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaChat.CallStatic <AndroidJavaObject[]>("ApplicasaChatGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            Chat[] chatInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                Chat[] chattemp = new Chat[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    chattemp[j] = new Chat(tempObj.GetRawObject(), tempObj);
                }
                if (chatInner == null)
                {
                    chatInner = chattemp;
                }
                else
                {
                    Chat[] firstOne = chatInner;
                    chatInner = new Chat[firstOne.Length + chattemp.Length];
                    firstOne.CopyTo(chatInner, 0);
                    chattemp.CopyTo(chatInner, firstOne.Length);
                }
            }
            return(chatInner);
        }
Beispiel #15
0
        public string[] GetNotifyReleaseStages()
        {
            if (!CanRunJNI())
            {
                return(new string[] {});
            }
            bool isAttached = bsg_unity_isJNIAttached();

            if (!isAttached)
            {
                AndroidJNI.AttachCurrentThread();
            }
            var stages = CallNativeObjectMethod("getNotifyReleaseStages", "()[Ljava/lang/String;", new object[] {});

            string[] value = null;
            if (stages != null && stages != IntPtr.Zero)
            {
                value = AndroidJNIHelper.ConvertFromJNIArray <string[]>(stages);
            }
            if (!isAttached)
            {
                AndroidJNI.DetachCurrentThread();
            }
            return(value);
        }
Beispiel #16
0
        public static GameV[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaGameV == null)
            {
                javaUnityApplicasaGameV = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaGameV");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaGameV.CallStatic <AndroidJavaObject[]>("ApplicasaGameVGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            GameV[] gameVInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                GameV[]             gameVtemp  = new GameV[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    gameVtemp[j] = new GameV(tempObj.GetRawObject(), tempObj);
                }
                if (gameVInner == null)
                {
                    gameVInner = gameVtemp;
                }
                else
                {
                    GameV[] firstOne = gameVInner;
                    gameVInner = new GameV[firstOne.Length + gameVtemp.Length];
                    firstOne.CopyTo(gameVInner, 0);
                    gameVtemp.CopyTo(gameVInner, firstOne.Length);
                }
            }
            return(gameVInner);
        }
Beispiel #17
0
        public static void GetVirtualGoodCategories(VirtualGoodCategory.GetVirtualGoodCategoryArrayFinished callback)
        {
            if (javaUnityApplicasaIAP == null)
            {
                javaUnityApplicasaIAP = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaIAP");
            }
            Error error;

            error.Id      = 1;
            error.Message = "Success";

            AndroidJavaObject virtualGoodCategoryArrayJava = javaUnityApplicasaIAP.CallStatic <AndroidJavaObject>("ApplicasaIAPGetVirtualGoodCategoriesWithBlock");

            VirtualGoodCategory.VirtualGoodCategoryArray virtualGoodCategoryArray = new VirtualGoodCategory.VirtualGoodCategoryArray();

            virtualGoodCategoryArray.Array = virtualGoodCategoryArrayJava.GetRawObject();
            AndroidJavaObject[] convertedArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(virtualGoodCategoryArray.Array);
            int count = 0;

            for (int i = 0; i < convertedArray.Length; i++)
            {
                AndroidJavaObject[] temp = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(convertedArray[i].GetRawObject());
                count += temp.Length;
            }
            virtualGoodCategoryArray.ArraySize = count;
            convertedArray = null;

            callback(true, error, virtualGoodCategoryArray);
        }
Beispiel #18
0
        internal static void _GetPendingLocalNotifications(Action <AndroidNotificationRequest[]> callback)
        {
            Helper.NullArgumentTest(callback);

            var requests = new List <AndroidNotificationRequest>();
            var jObj     = AndroidUtil.CallJavaStaticMethod <AndroidJavaObject>(
                ANDROID_JAVA_CLASS,
                "_GetPendingNotificationRequestsJson");

            // The JNI array conversion method will crash if the raw object value is 0.
            if (jObj.GetRawObject().ToInt32() != 0)
            {
                var jsonStrs = AndroidJNIHelper.ConvertFromJNIArray <string[]>(jObj.GetRawObject());
                foreach (string s in jsonStrs)
                {
                    var req = AndroidNotificationRequest.FromJson(s);
                    if (req != null)
                    {
                        requests.Add(req);
                    }
                }
            }

            jObj.Dispose();
            callback(requests.ToArray());
        }
Beispiel #19
0
        public static Foo[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaFoo == null)
            {
                javaUnityApplicasaFoo = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaFoo");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaFoo.CallStatic <AndroidJavaObject[]>("ApplicasaFooGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            Foo[] fooInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                Foo[] footemp = new Foo[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    footemp[j] = new Foo(tempObj.GetRawObject(), tempObj);
                }
                if (fooInner == null)
                {
                    fooInner = footemp;
                }
                else
                {
                    Foo[] firstOne = fooInner;
                    fooInner = new Foo[firstOne.Length + footemp.Length];
                    firstOne.CopyTo(fooInner, 0);
                    footemp.CopyTo(fooInner, firstOne.Length);
                }
            }
            return(fooInner);
        }
        public static DataManString[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaDataManString == null)
            {
                javaUnityApplicasaDataManString = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaDataManString");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaDataManString.CallStatic <AndroidJavaObject[]>("ApplicasaDataManStringGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            DataManString[] dataManStringInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray        = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                DataManString[]     dataManStringtemp = new DataManString[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    dataManStringtemp[j] = new DataManString(tempObj.GetRawObject(), tempObj);
                }
                if (dataManStringInner == null)
                {
                    dataManStringInner = dataManStringtemp;
                }
                else
                {
                    DataManString[] firstOne = dataManStringInner;
                    dataManStringInner = new DataManString[firstOne.Length + dataManStringtemp.Length];
                    firstOne.CopyTo(dataManStringInner, 0);
                    dataManStringtemp.CopyTo(dataManStringInner, firstOne.Length);
                }
            }
            return(dataManStringInner);
        }
Beispiel #21
0
        public static ScoreB[] GetArrayWithQuerySync(Query query, QueryKind queryKind)
        {
            if (javaUnityApplicasaScoreB == null)
            {
                javaUnityApplicasaScoreB = new AndroidJavaClass("com.applicasaunity.Unity.ApplicasaScoreB");
            }

            AndroidJavaObject[] bigArray = javaUnityApplicasaScoreB.CallStatic <AndroidJavaObject[]>("ApplicasaScoreBGetArrayWithQuerySync", query.innerQueryJavaObject, (int)queryKind);

            ScoreB[] scoreBInner = null;
            for (int i = 0; i < bigArray.Length; i++)
            {
                AndroidJavaObject tempJavaObject = bigArray[i];

                AndroidJavaObject[] InnerArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(tempJavaObject.GetRawObject());
                ScoreB[]            scoreBtemp = new ScoreB[InnerArray.Length];
                for (int j = 0; j < InnerArray.Length; j++)
                {
                    AndroidJavaObject tempObj = InnerArray[j];
                    scoreBtemp[j] = new ScoreB(tempObj.GetRawObject(), tempObj);
                }
                if (scoreBInner == null)
                {
                    scoreBInner = scoreBtemp;
                }
                else
                {
                    ScoreB[] firstOne = scoreBInner;
                    scoreBInner = new ScoreB[firstOne.Length + scoreBtemp.Length];
                    firstOne.CopyTo(scoreBInner, 0);
                    scoreBtemp.CopyTo(scoreBInner, firstOne.Length);
                }
            }
            return(scoreBInner);
        }
Beispiel #22
0
        private Dictionary <string, object> DictionaryFromJavaMap(IntPtr source)
        {
            var dict = new Dictionary <string, object>();

            var entries  = AndroidJNI.CallObjectMethod(source, MapEntrySet, new jvalue[] {});
            var iterator = AndroidJNI.CallObjectMethod(entries, CollectionIterator, new jvalue[] {});

            while (AndroidJNI.CallBooleanMethod(iterator, IteratorHasNext, new jvalue[] {}))
            {
                var entry = AndroidJNI.CallObjectMethod(iterator, IteratorNext, new jvalue[] {});
                var key   = AndroidJNI.CallStringMethod(entry, MapEntryGetKey, new jvalue[] {});
                var value = AndroidJNI.CallObjectMethod(entry, MapEntryGetValue, new jvalue[] {});
                if (value != null && value != IntPtr.Zero)
                {
                    var valueClass = AndroidJNI.CallObjectMethod(value, ObjectGetClass, new jvalue[] {});
                    if (AndroidJNI.CallBooleanMethod(valueClass, ClassIsArray, new jvalue[] {}))
                    {
                        var values = AndroidJNIHelper.ConvertFromJNIArray <string[]>(value);
                        dict.AddToPayload(key, values);
                    }
                    else if (AndroidJNI.IsInstanceOf(value, MapClass))
                    {
                        dict.AddToPayload(key, DictionaryFromJavaMap(value));
                    }
                    else
                    {
                        // FUTURE(dm): check if Integer, Long, Double, or Float before calling toString
                        dict.AddToPayload(key, AndroidJNI.CallStringMethod(value, ObjectToString, new jvalue[] {}));
                    }
                    AndroidJNI.DeleteLocalRef(value);
                }
                AndroidJNI.DeleteLocalRef(entry);
            }
            return(dict);
        }
        /// <summary>
        /// Calls a static method with an object return type.
        /// </summary>
        /// <returns>The invoke call.</returns>
        /// <param name="type">Type.</param>
        /// <param name="name">Name.</param>
        /// <param name="sig">Sig.</param>
        /// <param name="args">Arguments.</param>
        /// <typeparam name="T">The 1st type parameter.</typeparam>
        public static T StaticInvokeObjectCall <T>(
            string type, string name, string sig, params object[] args)
        {
            IntPtr rawClass = AndroidJNI.FindClass(type);
            IntPtr method   = AndroidJNI.GetStaticMethodID(rawClass, name, sig);

            jvalue[] jArgs = ConstructArgArray(args);

            try
            {
                IntPtr          val = AndroidJNI.CallStaticObjectMethod(rawClass, method, jArgs);
                ConstructorInfo c   = typeof(T).GetConstructor(new Type[] { val.GetType() });
                if (c != null)
                {
                    return((T)c.Invoke(new object[] { val }));
                }
                if (typeof(T).IsArray)
                {
                    // make an array
                    //TODO: handle arrays of objects
                    return(AndroidJNIHelper.ConvertFromJNIArray <T>(val));
                }
                Debug.Log("Trying cast....");
                Type t = typeof(T);
                return((T)Marshal.PtrToStructure(val, t));
            }
            finally
            {
                AndroidJNIHelper.DeleteJNIArgArray(args, jArgs);
            }
        }
Beispiel #24
0
    // Retrieves a list of available rewards for this AdUnit
    public List <MoPubReward> getAVailableRewards()
    {
        if (Application.platform != RuntimePlatform.Android)
        {
            return(null);
        }

        // Clear any existing reward object mappings between Unity and Android Java
        _rewardsDict.Clear();

        using (AndroidJavaObject obj = _plugin.Call <AndroidJavaObject> ("getAvailableRewards")) {
            AndroidJavaObject[] rewardsJavaObjArray =
                AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]> (obj.GetRawObject());

            if (rewardsJavaObjArray.Length > 1)
            {
                foreach (AndroidJavaObject r in rewardsJavaObjArray)
                {
                    string label  = r.Call <string> ("getLabel");
                    int    amount = r.Call <int> ("getAmount");
                    _rewardsDict.Add(new MoPubReward(label, amount), r);
                }
            }
        }

        return(new List <MoPubReward> (_rewardsDict.Keys));
    }
    internal override List <MoPub.Reward> GetAvailableRewards()
    {
        if (!CheckPluginReady())
        {
            return(new List <MoPub.Reward>());
        }

        // Clear any existing reward object mappings between Unity and Android Java
        _rewardsDict.Clear();

        using (var obj = _plugin.Call <AndroidJavaObject>("getAvailableRewards")) {
            var rewardsJavaObjArray = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(obj.GetRawObject());
            if (rewardsJavaObjArray.Length <= 1)
            {
                return(new List <MoPub.Reward>(_rewardsDict.Keys));
            }

            foreach (var r in rewardsJavaObjArray)
            {
                _rewardsDict.Add(
                    new MoPub.Reward {
                    Label = r.Call <string>("getLabel"), Amount = r.Call <int>("getAmount")
                }, r);
            }
        }

        return(new List <MoPub.Reward>(_rewardsDict.Keys));
    }
 private void onFrame(int frameIndex)
 {
     frameHandler(frameIndex, nativeTexture);
     if (!matrixSet)
     {
         Dispatcher.Dispatch(
             Dispatcher.Target.RenderThread,
             () => {
             surfaceTexture.Call(@"updateTexImage");
             // Update UV transform
             var args   = new jvalue[1];
             args [0].l = transformMatrix;
             AndroidJNI.CallVoidMethod(surfaceTexture.GetRawObject(), getTransformMatrixMethod, args);
             // Inject into render material
             var transform = AndroidJNIHelper.ConvertFromJNIArray <float[]> (transformMatrix);
             for (var j = 0; j < 4; j++)
             {
                 for (var i = 0; i < 4; i++)
                 {
                     matrix [i, j] = transform [i + 4 * j];
                 }
             }
             renderMaterial.SetMatrix("_SampleTransform", matrix);
             matrixSet = true;
         }
             );
     }
 }
        public static T StaticInvokeObjectCall <T>(string type, string name, string sig, params object[] args)
        {
            IntPtr clazz    = AndroidJNI.FindClass(type);
            IntPtr methodID = AndroidJNI.GetStaticMethodID(clazz, name, sig);

            jvalue[] jvalueArray = ConstructArgArray(args);
            IntPtr   array       = AndroidJNI.CallStaticObjectMethod(clazz, methodID, jvalueArray);

            Type[]          types       = new Type[] { array.GetType() };
            ConstructorInfo constructor = typeof(T).GetConstructor(types);

            if (constructor != null)
            {
                object[] parameters = new object[] { array };
                return((T)constructor.Invoke(parameters));
            }
            if (typeof(T).IsArray)
            {
                return(AndroidJNIHelper.ConvertFromJNIArray <T>(array));
            }
            Debug.Log("Trying cast....");
            Type structureType = typeof(T);

            return((T)Marshal.PtrToStructure(array, structureType));
        }
        private static string Android_GetAuthority(string className = "com.yasirkula.unity.NativeShareContentProvider")
        {
            int PackageManager_GET_PROVIDERS = 8;

            AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic <AndroidJavaObject>("currentActivity");
            var context        = activity.Call <AndroidJavaObject>("getApplicationContext");
            var packageManager = context.Call <AndroidJavaObject>("getPackageManager");

            var packageName = context.Call <string>("getPackageName");
            var packageInfo = packageManager.Call <AndroidJavaObject>("getPackageInfo", packageName, PackageManager_GET_PROVIDERS);

            var providersUncasted = packageInfo.Get <AndroidJavaObject>("providers");

            AndroidJavaObject[] providers = AndroidJNIHelper.ConvertFromJNIArray <AndroidJavaObject[]>(providersUncasted.GetRawObject());


            if (providers != null)
            {
                foreach (var provider in providers)
                {
                    var providerName        = provider.Get <string>("name");
                    var providerPackageName = provider.Get <string>("packageName");
                    var providerAuthority   = provider.Get <string>("authority");

                    if (!string.IsNullOrEmpty(providerName) && !string.IsNullOrEmpty(providerPackageName) && !string.IsNullOrEmpty(providerAuthority) &&
                        providerName.Equals(className) && providerPackageName.Equals(packageName))
                    {
                        return(providerAuthority);
                    }
                }
            }
            return(Application.identifier);
        }
Beispiel #29
0
            public void OnGetVideoFrame(AndroidJavaObject frameData)
            {
                byte[] data = null;
                long   positionMilliseconds = 0;

                if (frameData != null)
                {
                    AndroidJavaObject dataObject = frameData.Get <AndroidJavaObject>("Data");
                    data = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(dataObject.GetRawObject());
                    if (data.Length == 0)
                    {
                        data = null;
                    }

                    positionMilliseconds = frameData.Get <long>("PositionMilliseconds");
                }

                LifecycleManager.Instance.QueueOnUpdateAction(() => {
                    bool isCallbackValid = callback != null;
                    if (isCallbackTargetUnityObject)
                    {
                        isCallbackValid = isCallbackValid && (callback.Target as UnityEngine.Object) != null;
                    }
                    if (isCallbackValid)
                    {
                        callback(data, positionMilliseconds);
                    }
                });
            }
Beispiel #30
0
        public static byte[] readBytesFromStreamingAssetsPath(string filepath)
        {
            byte[] buff = null;
            try {
#if UNITY_ANDROID && !UNITY_EDITOR
                sbyte[] sbuff    = null;
                string  tempPath = filepath.Replace(PStr.b().a(Application.streamingAssetsPath).a("/").e(), "");

                AndroidJavaObject obj = jcAssetMgr.CallStatic <AndroidJavaObject>("getBytes", tempPath);
                if (obj != null && obj.GetRawObject().ToInt32() != 0)
                {
                    sbuff = AndroidJNIHelper.ConvertFromJNIArray <sbyte[]>(obj.GetRawObject());
                }
                if (obj != null)
                {
                    obj.Dispose();
                    obj = null;
                }
                buff = Array.ConvertAll <sbyte, byte>(sbuff, a => (byte)a);
#else
                if (File.Exists(filepath))
                {
                    buff = File.ReadAllBytes(filepath);
                }
#endif
            } catch (Exception e) {
                Debug.LogError(e);
            }
            return(buff);
        }