// Full access to any existing or new Facebook dialogs that get added. See Facebooks documentation for parameters and dialog types public static void showDialog(string dialogType, Dictionary <string, string> parameters) { if (Application.platform != RuntimePlatform.Android) { return; } // load up the Bundle using (var bundle = new AndroidJavaObject("android.os.Bundle")) { var putStringMethod = AndroidJNI.GetMethodID(bundle.GetRawClass(), "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); var args = new object[2]; // add all our dictionary elements into the Bundle if (parameters != null) { foreach (var kv in parameters) { args[0] = new AndroidJavaObject("java.lang.String", kv.Key); args[1] = new AndroidJavaObject("java.lang.String", kv.Value); AndroidJNI.CallVoidMethod(bundle.GetRawObject(), putStringMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } // call off to java land if (!isSessionValid()) { babysitRequest(true, () => { _facebookPlugin.Call("showDialog", dialogType, bundle); }); } else { _facebookPlugin.Call("showDialog", dialogType, bundle); } } }
private void initSDK() { IntPtr intPtr = AndroidJNI.FindClass("com/tencent/qgame/livesdk/bridge/Unity3D"); QGameKitAndroidBridge.constructorMethodID = AndroidJNI.GetMethodID(intPtr, "<init>", "(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;IIII)V"); if (QGameKitAndroidBridge.constructorMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find UnityBridge constructor."); return; } QGameKitAndroidBridge.setupMethodID = AndroidJNI.GetMethodID(intPtr, "setup", "(Lcom/tencent/qgame/livesdk/bridge/UserAccountListener;)Z"); if (QGameKitAndroidBridge.setupMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setup() method."); return; } QGameKitAndroidBridge.tearDownMethodID = AndroidJNI.GetMethodID(intPtr, "tearDown", "()V"); if (QGameKitAndroidBridge.tearDownMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find tearDown() method."); return; } QGameKitAndroidBridge.resetMethodID = AndroidJNI.GetMethodID(intPtr, "reset", "()Z"); if (QGameKitAndroidBridge.resetMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find reset() method."); return; } QGameKitAndroidBridge.startLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "startLiveBroadcast", "(Ljava/lang/String;Ljava/lang/String;)Z"); if (QGameKitAndroidBridge.startLiveBroadcastMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find startLiveBroadcast() method."); return; } QGameKitAndroidBridge.stopLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "stopLiveBroadcast", "()Z"); if (QGameKitAndroidBridge.stopLiveBroadcastMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find stopLiveBroadcast() method."); return; } QGameKitAndroidBridge.frameUpdatedMethodID = AndroidJNI.GetMethodID(intPtr, "frameUpdated", "()V"); if (QGameKitAndroidBridge.frameUpdatedMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find frameUpdated() method."); return; } QGameKitAndroidBridge.enterLiveHallMethodID = AndroidJNI.GetMethodID(intPtr, "enterLiveHall", "(Landroid/content/Context;)V"); if (QGameKitAndroidBridge.enterLiveHallMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find enterLiveHall() method."); return; } QGameKitAndroidBridge.enterLiveHallInGameMethodID = AndroidJNI.GetMethodID(intPtr, "enterLiveHallInGame", "(Landroid/content/Context;)V"); if (QGameKitAndroidBridge.enterLiveHallInGameMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find enterLiveHallInGameMethodID() method."); return; } QGameKitAndroidBridge.updateUserAccountMethodID = AndroidJNI.GetMethodID(intPtr, "updateUserAccount", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); if (QGameKitAndroidBridge.updateUserAccountMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find updateUserAccount() method."); return; } QGameKitAndroidBridge.getLiveBroadcastStatusMethodID = AndroidJNI.GetMethodID(intPtr, "getLiveBroadcastStatus", "()I"); if (QGameKitAndroidBridge.getLiveBroadcastStatusMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find getLiveBroadcastStatus() method."); return; } QGameKitAndroidBridge.getErrorCodeMethodID = AndroidJNI.GetMethodID(intPtr, "getErrorCode", "()I"); if (QGameKitAndroidBridge.getErrorCodeMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find getErrorCode() method."); return; } QGameKitAndroidBridge.setUserAccountListenerMethodID = AndroidJNI.GetMethodID(intPtr, "setUserAccountListener", "(Lcom/tencent/qgame/livesdk/bridge/UserAccountListener;)V"); if (QGameKitAndroidBridge.setUserAccountListenerMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setUserAccountListener() method."); return; } QGameKitAndroidBridge.setCommentReceiveDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setCommentReceiveListener", "(Lcom/tencent/qgame/livesdk/bridge/CommentReceiveListener;)V"); if (QGameKitAndroidBridge.setCommentReceiveDelegateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setCommentReceiveListener() method."); return; } QGameKitAndroidBridge.setLogDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setLogListener", "(Lcom/tencent/qgame/livesdk/bridge/LogListener;)V"); if (QGameKitAndroidBridge.setLogDelegateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setLogListener() method."); return; } QGameKitAndroidBridge.setLiveStatusChangedDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setLiveStatusChangedListener", "(Lcom/tencent/qgame/live/listener/OnLiveStatusChangedListener;)V"); if (QGameKitAndroidBridge.setLiveStatusChangedDelegateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setLiveStatusChangedListener() method."); return; } QGameKitAndroidBridge.setShareListenerMethodID = AndroidJNI.GetMethodID(intPtr, "setShareListener", "(Lcom/tencent/qgame/livesdk/bridge/ShareListener;)V"); if (QGameKitAndroidBridge.setShareListenerMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setShareListener() method."); return; } QGameKitAndroidBridge.setErrorCodeDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setErrorCodeListener", "(Lcom/tencent/qgame/live/listener/ErrorCodeListener;)V"); if (QGameKitAndroidBridge.setErrorCodeDelegateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setErrorCodeDelegateMethodID() method."); return; } QGameKitAndroidBridge.setWebViewStatusChangedDelegateMethodID = AndroidJNI.GetMethodID(intPtr, "setWebViewStatusChangedListener", "(Lcom/tencent/qgame/livesdk/bridge/WebViewStatusChangedListener;)V"); if (QGameKitAndroidBridge.setWebViewStatusChangedDelegateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setWebViewStatusChangedListener() method."); return; } QGameKitAndroidBridge.isLiveBroadcastSupportedMethodID = AndroidJNI.GetMethodID(intPtr, "isLiveBroadcastSupported", "()Z"); if (QGameKitAndroidBridge.isLiveBroadcastSupportedMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find isLiveBroadcastSupportedMethodID() method."); return; } QGameKitAndroidBridge.getVersionNameMethodID = AndroidJNI.GetMethodID(intPtr, "getVersionName", "()Ljava/lang/String;"); if (QGameKitAndroidBridge.getVersionNameMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find getVersionNameMethodID() method."); return; } QGameKitAndroidBridge.showCameraMethodID = AndroidJNI.GetMethodID(intPtr, "showCamera", "()Z"); if (QGameKitAndroidBridge.showCameraMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find showCameraMethodID() method."); return; } QGameKitAndroidBridge.hideCameraMethodID = AndroidJNI.GetMethodID(intPtr, "hideCamera", "()V"); if (QGameKitAndroidBridge.hideCameraMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find hideCameraMethodID() method."); return; } QGameKitAndroidBridge.setEnvironmentTypeMethodID = AndroidJNI.GetMethodID(intPtr, "setEnvironmentType", "(I)V"); if (QGameKitAndroidBridge.setEnvironmentTypeMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setEnvironmentTypeMethodID() method"); return; } QGameKitAndroidBridge.getLiveFrameRateMethodID = AndroidJNI.GetMethodID(intPtr, "getLiveFrameRate", "()I"); if (QGameKitAndroidBridge.getLiveFrameRateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find getLiveFrameRate() method"); return; } QGameKitAndroidBridge.notifyUserAccountMethodID = AndroidJNI.GetMethodID(intPtr, "notifyUserAccountUpdate", "()V"); if (QGameKitAndroidBridge.notifyUserAccountMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find notifyUserAccountMethodID() method."); return; } QGameKitAndroidBridge.doOnCreateMethodID = AndroidJNI.GetMethodID(intPtr, "doOnCreate", "()V"); if (QGameKitAndroidBridge.doOnCreateMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find doOnCreate() method"); return; } QGameKitAndroidBridge.doOnResumeMethodID = AndroidJNI.GetMethodID(intPtr, "doOnResume", "()V"); if (QGameKitAndroidBridge.doOnResumeMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find doOnResume() method"); return; } QGameKitAndroidBridge.doOnPauseMethodID = AndroidJNI.GetMethodID(intPtr, "doOnPause", "()V"); if (QGameKitAndroidBridge.doOnPauseMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find doOnPause() method"); return; } QGameKitAndroidBridge.doOnDestroyMethodID = AndroidJNI.GetMethodID(intPtr, "doOnDestroy", "()V"); if (QGameKitAndroidBridge.doOnDestroyMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find doOnDestroy() method"); return; } QGameKitAndroidBridge.doOnBackPressedMethodID = AndroidJNI.GetMethodID(intPtr, "doOnBackPressed", "()Z"); if (QGameKitAndroidBridge.doOnBackPressedMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find doOnBackPressed() method"); return; } QGameKitAndroidBridge.isSupportCameraMethodID = AndroidJNI.GetMethodID(intPtr, "isSupportCamera", "()Z"); if (QGameKitAndroidBridge.isSupportCameraMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find isSupportCamera() method"); return; } QGameKitAndroidBridge.shareLiveBroadcastMethodID = AndroidJNI.GetMethodID(intPtr, "shareLiveBroadcast", "()V"); if (QGameKitAndroidBridge.shareLiveBroadcastMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find shareLiveBroadcast() method"); return; } QGameKitAndroidBridge.isSupportLiveHallMethodID = AndroidJNI.GetMethodID(intPtr, "isSupportLiveHall", "()Z"); if (QGameKitAndroidBridge.isSupportLiveHallMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find isSupportLiveHall() method"); return; } QGameKitAndroidBridge.setDanmakuEnabledMethodID = AndroidJNI.GetMethodID(intPtr, "setDanmakuEnabled", "(Z)V"); if (QGameKitAndroidBridge.setDanmakuEnabledMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find setDanmakuEnabled() method"); return; } QGameKitAndroidBridge.showDanmakuMethodID = AndroidJNI.GetMethodID(intPtr, "showDanmaku", "()V"); if (QGameKitAndroidBridge.showDanmakuMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find showDanmaku() method"); return; } QGameKitAndroidBridge.hideDanmakuMethodID = AndroidJNI.GetMethodID(intPtr, "hideDanmaku", "()V"); if (QGameKitAndroidBridge.hideDanmakuMethodID == IntPtr.Zero) { UnityEngine.Debug.LogError("Can't find hideDanmaku() method"); return; } jvalue[] args = AndroidJNIHelper.CreateJNIArgArray(new object[] { QGameKitAndroidBridge.getActivityContext(), QGameKitAndroidBridge.gameID, QGameKitAndroidBridge.wnsID, Screen.width, Screen.height, Convert.ToInt32(QGameKitAndroidBridge.myCaptureType), Convert.ToInt32(QGameKitAndroidBridge.sdkEnvironmentType) }); IntPtr intPtr2 = AndroidJNI.NewObject(intPtr, QGameKitAndroidBridge.constructorMethodID, args); if (intPtr2 == IntPtr.Zero) { UnityEngine.Debug.LogError("--- Can't create Unity bridge object."); return; } this.androidBridge = AndroidJNI.NewGlobalRef(intPtr2); AndroidJNI.DeleteLocalRef(intPtr2); AndroidJNI.DeleteLocalRef(intPtr); UnityEngine.Debug.Log("--- grabFrameRate = " + this.grabFrameRate); this.frameInterval = 1f / (float)this.grabFrameRate; UnityEngine.Debug.Log("--- 1.0f / grabFrameRate = " + this.frameInterval); this.startTime = Time.time; this.isRunning = false; if (QGameKitAndroidBridge.myCaptureType == (QGameKit.CaptureType) 0) { if (QGameKitAndroidBridge.userAccountDelegate != null) { this.SetUserAccountDelegate(QGameKitAndroidBridge.userAccountDelegate); } UnityEngine.Debug.Log("CaptureType is zero, give up setup"); return; } if (this.setup()) { UnityEngine.Debug.Log("Native setup success."); } else { UnityEngine.Debug.LogError("Native setup failed!"); } }
/// <summary> /// Load the billing service. /// </summary> protected override void _loadBillingService() { if (StoreSettings.GPlayBP) { if (string.IsNullOrEmpty(StoreSettings.AndroidPublicKey) || StoreSettings.AndroidPublicKey == StoreSettings.AND_PUB_KEY_DEFAULT) { SoomlaUtils.LogError(TAG, "You chose Google Play billing service, but publicKey is not set!! Stopping here!!"); throw new ExitGUIException(); } if (StoreSettings.PlaySsvValidation) { if (string.IsNullOrEmpty(StoreSettings.PlayClientId) || StoreSettings.PlayClientId == StoreSettings.PLAY_CLIENT_ID_DEFAULT) { SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but clientId is not set!! Stopping here!!"); throw new ExitGUIException(); } if (string.IsNullOrEmpty(StoreSettings.PlayClientSecret) || StoreSettings.PlayClientSecret == StoreSettings.PLAY_CLIENT_SECRET_DEFAULT) { SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but clientSecret is not set!! Stopping here!!"); throw new ExitGUIException(); } if (string.IsNullOrEmpty(StoreSettings.PlayRefreshToken) || StoreSettings.PlayRefreshToken == StoreSettings.PLAY_REFRESH_TOKEN_DEFAULT) { SoomlaUtils.LogError(TAG, "You chose Google Play Receipt Validation, but refreshToken is not set!! Stopping here!!"); throw new ExitGUIException(); } } } AndroidJNI.PushLocalFrame(100); using (AndroidJavaClass jniSoomlaStoreClass = new AndroidJavaClass("com.soomla.store.SoomlaStore")) { jniSoomlaStore = jniSoomlaStoreClass.CallStatic <AndroidJavaObject>("getInstance"); bool success = jniSoomlaStore.Call <bool>("loadBillingService"); if (!success) { SoomlaUtils.LogError(TAG, "Couldn't load billing service! Billing functions won't work."); } } if (StoreSettings.GPlayBP) { using (AndroidJavaClass jniGooglePlayIabServiceClass = new AndroidJavaClass("com.soomla.store.billing.google.GooglePlayIabService")) { AndroidJavaObject jniGooglePlayIabService = jniGooglePlayIabServiceClass.CallStatic <AndroidJavaObject>("getInstance"); jniGooglePlayIabService.Call("setPublicKey", StoreSettings.AndroidPublicKey); if (StoreSettings.PlaySsvValidation) { using (AndroidJavaObject obj_HashMap = new AndroidJavaObject("java.util.HashMap")) { IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; // client ID using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "clientId")) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayClientId)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } // client secret using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "clientSecret")) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayClientSecret)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } // refresh token using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "refreshToken")) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", StoreSettings.PlayRefreshToken)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } // verifyOnServerFailure using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", "verifyOnServerFailure")) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.Boolean", StoreSettings.PlayVerifyOnServerFailure)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } jniGooglePlayIabService.Call("configVerifyPurchases", obj_HashMap); } jniGooglePlayIabServiceClass.SetStatic("AllowAndroidTestPurchases", StoreSettings.AndroidTestPurchases); } } } AndroidJNI.PopLocalFrame(IntPtr.Zero); }
private static AndroidJavaObject ToJavaHashMap(Dictionary <string, string> dic) { var hashMap = new AndroidJavaObject("java.util.HashMap"); var putMethod = AndroidJNIHelper.GetMethodID(hashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); var arguments = new object[2]; foreach (var entry in dic) { using (var key = new AndroidJavaObject("java.lang.String", entry.Key)) { using (var val = new AndroidJavaObject("java.lang.String", entry.Value)) { arguments[0] = key; arguments[1] = val; AndroidJNI.CallObjectMethod(hashMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(arguments)); } } // end using } // end foreach return(hashMap); }
public static void OnEvent(string actionId, Dictionary <string, object> parameters) { if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor) { if (parameters != null && parameters.Count > 0 && parameters.Count <= 10) { #if UNITY_IPHONE int count = parameters.Count; string [] keys = new string[count]; string [] stringValues = new string[count]; double [] numberValues = new double[count]; int index = 0; foreach (KeyValuePair <string, object> kvp in parameters) { if (kvp.Value is string) { keys[index] = kvp.Key; stringValues[index] = (string)kvp.Value; } else { try { double tmp = System.Convert.ToDouble(kvp.Value); numberValues[index] = tmp; keys[index] = kvp.Key; } catch (System.Exception) { count--; continue; } } index++; } _tdgaOnEvent(actionId, keys, stringValues, numberValues, count); #elif UNITY_ANDROID int count = parameters.Count; AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap", count); IntPtr method_Put = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair <string, object> kvp in parameters) { args[0] = new AndroidJavaObject("java.lang.String", kvp.Key); if (typeof(System.String).IsInstanceOfType(kvp.Value)) { args[1] = new AndroidJavaObject("java.lang.String", kvp.Value); } else { args[1] = new AndroidJavaObject("java.lang.Double", "" + kvp.Value); } AndroidJNI.CallObjectMethod(map.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } if (agent != null) { AndroidJavaObject activity = unityClass.GetStatic <AndroidJavaObject>("currentActivity"); agent.CallStatic("onEvent", activity, actionId, map); } #elif UNITY_WP8 TalkingDataGAWP.TalkingDataGA.onEvent(actionId, parameters); #endif } } }
/// <summary> /// 支付接口 /// </summary> public void Pay(GameCmd.stCreatePlatOrderPropertyUserCmd_S orderMsg, uint characterId, int characterlv, string roleName, string clanName , Pmd.ZoneInfo zoneInfo, string currencyName, float currencyRatio , table.RechargeDataBase rechargeDB) { if (!DataManager.Manager <LoginDataManager>().IsSDKLogin) { Debug.LogError("Pay Faield,SDK not login!"); return; } if (Application.platform == RuntimePlatform.Android) { if (null == rechargeDB) { Debug.LogError("充值失败,数据错误"); return; } AndroidJavaObject payData = new AndroidJavaObject("com.talkingsdk.models.PayData"); AndroidJavaObject hashmap = new AndroidJavaObject("java.util.HashMap"); System.IntPtr methodPut = AndroidJNIHelper.GetMethodID(hashmap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); Debug.Log("m_loginResult.uid :" + m_loginResult.uid); Dictionary <string, string> dict = new Dictionary <string, string>(); dict.Add("UserId", m_loginResult.szLoginAcccount); //uid //dict.Add("UserId", m_loginResult.uid); //uid dict.Add("UserBalance", "0"); //用户余额 dict.Add("UserGamerVip", "1"); //vip 等级 dict.Add("UserLevel", characterlv.ToString()); //角色等级 if (string.IsNullOrEmpty(clanName)) { clanName = "testName"; } dict.Add("UserPartyName", clanName); //工会,帮派 if (string.IsNullOrEmpty(roleName)) { roleName = "Underworld"; } dict.Add("UserRoleName", roleName); //角色名称 dict.Add("UserRoleId", characterId.ToString()); //角色id dict.Add("LoginAccount", m_loginResult.szLoginAcccount); dict.Add("LoginDataEx", m_loginResult.szLoginDataEx); dict.Add("LoginSession", m_loginResult.szLoginSession); dict.Add("AccessKey", orderMsg.sign); //拓展字段 dict.Add("OutOrderID", orderMsg.platorder); //平台订单号 dict.Add("NoticeUrl", orderMsg.noticeurl); //支付回调地址 //UserServerId string zoneIdStr = ""; string serverNameStr = "Underworld"; if (null != zoneInfo) { //合服后使用目标服务器 zoneIdStr = LoginDataManager.GetBestZoneID(zoneInfo).ToString(); serverNameStr = zoneInfo.zonename; } dict.Add("UserServerId", zoneIdStr); dict.Add("UserServerName", serverNameStr); // int payMoney = (int)rechargeDB.money; int gameMoneyAmout = payMoney * 10; dict.Add("GameMoneyAmount", gameMoneyAmout.ToString()); dict.Add("GameMoneyName", currencyName); object[] args = new object[2]; foreach (KeyValuePair <string, string> kvp in dict) { AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key); AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value); args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(hashmap.GetRawObject(), methodPut, AndroidJNIHelper.CreateJNIArgArray(args)); } Debug.LogError("go to pay.... setMyOrderId " + orderMsg.gameorder + " payGoodsData.pay_info.out_order: " + orderMsg.platorder + " rmb: " + payMoney + " setProductCount :" + orderMsg.goodnum + " setProductId :" + orderMsg.appgoodid + " setProductName :" + rechargeDB.rechargeName + " setSubmitTime:" + orderMsg.createtime + " extData:" + orderMsg.extdata + " AccessKey:" + orderMsg.sign + " userID:" + m_loginResult.szLoginAcccount + " LoginAcccount:" + m_loginResult.szLoginAcccount ); //string 类型 payData.Call("setMyOrderId", orderMsg.gameorder); payData.Call("setProductId", orderMsg.appgoodid.ToString());//"1");// payData.Call("setSubmitTime", orderMsg.createtime); payData.Call("setDescription", rechargeDB.desc); payData.Call("setProductName", rechargeDB.rechargeName); //int 类型 ,SDK 这边统一以分为单位 int fenPayMoney = payMoney * 100; payData.Call("setProductRealPrice", fenPayMoney); payData.Call("setProductIdealPrice", fenPayMoney); payData.Call("setProductCount", (int)orderMsg.goodnum); payData.Call("setEx", hashmap); sdkBase.Call("pay", payData); } else if (Application.platform == RuntimePlatform.IPhonePlayer) { } }
protected virtual void initParamsFromAndroidJavaObject(AndroidJavaObject instance) { this.buttonText = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonText", "()Ljava/lang/String"), new jvalue[0] { }); this.buttonColor = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getButtonColor", "()Ljava/lang/String"), new jvalue[0] { }); this.categories = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCategories", "()Ljava/lang/String"), new jvalue[0] { }); this.postback = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getPostback", "()Ljava/lang/String"), new jvalue[0] { }); this.orientation = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getOrientation", "()Ljava/lang/String"), new jvalue[0] { }); this.backButtonCanClose = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isBackButtonCanClose", "()Z"), new jvalue[0] { }); this.mute = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getMute", "()Z"), new jvalue[0] { }); }
private AndroidJavaObject convertToJavaHashMap(Dictionary <string, object> configD) { AndroidJavaObject config_Hashmap = new AndroidJavaObject("java.util.HashMap"); if (configD != null) { Dictionary <string, object> configDict = (from kv in configD where kv.Value != null select kv).ToDictionary(kv => kv.Key, kv => kv.Value); IntPtr method_Put = AndroidJNIHelper.GetMethodID(config_Hashmap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; args[0] = args[1] = null; foreach (KeyValuePair <string, object> kvp in configDict) { using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key)) { args[0] = k; if (kvp.Value != null && kvp.Value.Equals("yes") || kvp.Value.Equals("no")) { string value = kvp.Value.Equals("yes") ? "true" : "false"; args[1] = new AndroidJavaObject("java.lang.Boolean", value); } else if (kvp.Value != null) { if (kvp.Value.GetType().ToString() == "System.String") { args[1] = new AndroidJavaObject("java.lang.String", kvp.Value); } else if (kvp.Value.GetType().ToString() == "System.String[]") { string[] tagsArray = (string[])kvp.Value; AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList"); IntPtr method_add = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add", "(Ljava/lang/String;)Z"); object[] tags_args = new object[1]; foreach (string tag in tagsArray) { if (tag != null) { tags_args[0] = new AndroidJavaObject("java.lang.String", tag); AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(), method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args)); } } args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList); } else { if (kvp.Key == HelpshiftSdk.HSCUSTOMMETADATAKEY) { Dictionary <string, object> metaMap = (Dictionary <string, object>)kvp.Value; AndroidJavaObject meta_Hashmap = new AndroidJavaObject("java.util.HashMap"); IntPtr method_MetaPut = AndroidJNIHelper.GetMethodID(meta_Hashmap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] meta_args = new object[2]; meta_args[0] = meta_args[1] = null; foreach (KeyValuePair <string, object> metaKvp in metaMap) { meta_args[0] = new AndroidJavaObject("java.lang.String", metaKvp.Key); if (metaKvp.Value.GetType().ToString() == "System.String") { meta_args[1] = new AndroidJavaObject("java.lang.String", metaKvp.Value); } else if (metaKvp.Value.GetType().ToString() == "System.Int32") { meta_args[1] = new AndroidJavaObject("java.lang.Integer", metaKvp.Value); } else if (metaKvp.Value.GetType().ToString() == "System.Double") { meta_args[1] = new AndroidJavaObject("java.lang.Double", metaKvp.Value); } else if (metaKvp.Key == HelpshiftSdk.HSTAGSKEY && metaKvp.Value.GetType().ToString() == "System.String[]") { string[] tagsArray = (string[])metaKvp.Value; AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList"); IntPtr method_add = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add", "(Ljava/lang/String;)Z"); object[] tags_args = new object[1]; foreach (string tag in tagsArray) { if (tag != null) { tags_args[0] = new AndroidJavaObject("java.lang.String", tag); AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(), method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args)); } } meta_args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList); } if (meta_args[1] != null) { AndroidJNI.CallObjectMethod(meta_Hashmap.GetRawObject(), method_MetaPut, AndroidJNIHelper.CreateJNIArgArray(meta_args)); } } args[1] = new AndroidJavaObject("java.util.HashMap", meta_Hashmap); } if (kvp.Key == HelpshiftSdk.HSTAGSMATCHINGKEY) { Dictionary <string, object> tagsMatchingMap = (Dictionary <string, object>)kvp.Value; AndroidJavaObject tagsMatching_Hashmap = new AndroidJavaObject("java.util.HashMap"); IntPtr method_MetaPut = AndroidJNIHelper.GetMethodID(tagsMatching_Hashmap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] tagsMatching_args = new object[2]; tagsMatching_args[0] = tagsMatching_args[1] = null; foreach (KeyValuePair <string, object> tagsMatchKvp in tagsMatchingMap) { tagsMatching_args[0] = new AndroidJavaObject("java.lang.String", tagsMatchKvp.Key); if (tagsMatchKvp.Key == "operator" && tagsMatchKvp.Value.GetType().ToString() == "System.String") { tagsMatching_args[1] = new AndroidJavaObject("java.lang.String", tagsMatchKvp.Value); } else if (tagsMatchKvp.Key == "tags" && tagsMatchKvp.Value.GetType().ToString() == "System.String[]") { string[] tagsArray = (string[])tagsMatchKvp.Value; AndroidJavaObject tags_ArrayList = new AndroidJavaObject("java.util.ArrayList"); IntPtr method_add = AndroidJNIHelper.GetMethodID(tags_ArrayList.GetRawClass(), "add", "(Ljava/lang/String;)Z"); object[] tags_args = new object[1]; foreach (string tag in tagsArray) { if (tag != null) { tags_args[0] = new AndroidJavaObject("java.lang.String", tag); AndroidJNI.CallBooleanMethod(tags_ArrayList.GetRawObject(), method_add, AndroidJNIHelper.CreateJNIArgArray(tags_args)); } } tagsMatching_args[1] = new AndroidJavaObject("java.util.ArrayList", tags_ArrayList); } if (tagsMatching_args[1] != null) { AndroidJNI.CallObjectMethod(tagsMatching_Hashmap.GetRawObject(), method_MetaPut, AndroidJNIHelper.CreateJNIArgArray(tagsMatching_args)); } } args[1] = new AndroidJavaObject("java.util.HashMap", tagsMatching_Hashmap); } } } if (args[1] != null) { AndroidJNI.CallObjectMethod(config_Hashmap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } } } return(config_Hashmap); }
static AndroidAssetStream() { var clsPtr = AndroidJNI.FindClass("java.io.InputStream"); METHOD_read = AndroidJNIHelper.GetMethodID(clsPtr, "read", "([B)I"); }
private byte[] ImportFromIntent() { try { // Get the current activity AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activityObject = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity"); // Get the current intent AndroidJavaObject intent = activityObject.Call <AndroidJavaObject>("getIntent"); // Get the intent data using AndroidJNI.CallObjectMethod so we can check for null IntPtr method_getData = AndroidJNIHelper.GetMethodID(intent.GetRawClass(), "getData", "()Ljava/lang/Object;"); IntPtr getDataResult = AndroidJNI.CallObjectMethod(intent.GetRawObject(), method_getData, AndroidJNIHelper.CreateJNIArgArray(new object[0])); if (getDataResult.ToInt32() != 0) { // Now actually get the data. We should be able to get it from the result of AndroidJNI.CallObjectMethod, but I don't now how so just call again AndroidJavaObject intentURI = intent.Call <AndroidJavaObject>("getData"); // Open the URI as an input channel AndroidJavaObject contentResolver = activityObject.Call <AndroidJavaObject>("getContentResolver"); AndroidJavaObject inputStream = contentResolver.Call <AndroidJavaObject>("openInputStream", intentURI); //AndroidJavaObject inputChannel = inputStream.Call<AndroidJavaObject>("getChannel"); // Open an output channel //AndroidJavaObject outputStream = new AndroidJavaObject("java.io.FileOutputStream", importPath); //AndroidJavaObject outputChannel = outputStream.Call<AndroidJavaObject>("getChannel"); // Copy the file //long bytesTransfered = 0; //long bytesTotal = inputStream.Call<long>("size"); /*while (bytesTransfered < bytesTotal && bytesTransfered<100) * { * bytesTransfered += inputChannel.Call<long>("transferTo", bytesTransfered, bytesTotal, outputChannel); * }*/ byte[] data = inputStream.Call <byte[]>("readAllBytes"); // Close the streams inputStream.Call("close"); return(data); //outputStream.Call("close"); } } catch (System.Exception ex) { Debug.Log(ex); // Handle error } return(null); }
private static AndroidJavaObject ConvertHashMap(Dictionary <string, string> dict) { AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap"); IntPtr methodID = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] array = new object[2]; foreach (KeyValuePair <string, string> item in dict) { using (AndroidJavaObject androidJavaObject2 = new AndroidJavaObject("java.lang.String", item.Key)) { using (AndroidJavaObject androidJavaObject3 = new AndroidJavaObject("java.lang.String", item.Value)) { array[0] = androidJavaObject2; array[1] = androidJavaObject3; AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array)); } } } return(androidJavaObject); }
public static AndroidJavaObject DictionaryToAndroidJavaObject(IDictionary <String, Object> dictionary) { var javaMap = new AndroidJavaObject("java.util.HashMap"); var putMethod = AndroidJNIHelper.GetMethodID(javaMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); var args = new object[2]; foreach (var kvp in dictionary) { using (var k = new AndroidJavaObject("java.lang.String", kvp.Key)) { using (var v = new AndroidJavaObject("java.lang.String", kvp.Value)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(javaMap.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } } return(javaMap); }
private AndroidJavaObject toJavaMap(Dictionary <string, object> values) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown AndroidJavaObject val = new AndroidJavaObject("java.util.HashMap", new object[0]); IntPtr methodID = AndroidJNIHelper.GetMethodID(val.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] array = new object[2]; foreach (KeyValuePair <string, object> value in values) { AndroidJavaObject val2 = new AndroidJavaObject("java.lang.String", new object[1] { value.Key }); try { AndroidJavaObject val3 = toAndroidJavaObject(value.Value); if (val3 != null) { AndroidJavaObject val4 = val3; try { array[0] = val2; array[1] = val3; AndroidJNI.CallObjectMethod(val.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array)); } finally { ((IDisposable)val4)?.Dispose(); } } } finally { ((IDisposable)val2)?.Dispose(); } } return(val); }
protected override void initParamsFromAndroidJavaObject(AndroidJavaObject instance) { base.initParamsFromAndroidJavaObject(instance); this.creativeType = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getCreativeType", "()Ljava/lang/String"), new jvalue[0] { }); this.skipText = AndroidJNI.CallStringMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "getSkipText", "()Ljava/lang/String"), new jvalue[0] { }); this.autoPlay = AndroidJNI.CallBooleanMethod(instance.GetRawObject(), AndroidJNIHelper.GetMethodID(instance.GetRawClass(), "isAutoPlay", "()Z"), new jvalue[0] { }); }
public static T StaticInvokeCall <T>(string type, string name, string sig, params object[] args) { Type t = typeof(T); IntPtr rawClass = AndroidJNI.FindClass(type); IntPtr method = AndroidJNI.GetStaticMethodID(rawClass, name, sig); jvalue[] jArgs = ConstructArgArray(args); try { if (t == typeof(bool)) { return((T)(object)AndroidJNI.CallStaticBooleanMethod( rawClass, method, jArgs)); } else if (t == typeof(string)) { return((T)(object)AndroidJNI.CallStaticStringMethod( rawClass, method, jArgs)); } else if (t == typeof(int)) { return((T)(object)AndroidJNI.CallStaticIntMethod( rawClass, method, jArgs)); } else if (t == typeof(float)) { return((T)(object)AndroidJNI.CallStaticFloatMethod( rawClass, method, jArgs)); } else if (t == typeof(double)) { return((T)(object)AndroidJNI.CallStaticDoubleMethod( rawClass, method, jArgs)); } else if (t == typeof(byte)) { return((T)(object)AndroidJNI.CallStaticByteMethod( rawClass, method, jArgs)); } else if (t == typeof(char)) { return((T)(object)AndroidJNI.CallStaticCharMethod( rawClass, method, jArgs)); } else if (t == typeof(long)) { return((T)(object)AndroidJNI.CallStaticLongMethod( rawClass, method, jArgs)); } else if (t == typeof(short)) { return((T)(object)AndroidJNI.CallStaticShortMethod( rawClass, method, jArgs)); } else if (t == typeof(IntPtr)) { return((T)(object)AndroidJNI.CallStaticObjectMethod( rawClass, method, jArgs)); } else { return(StaticInvokeObjectCall <T>(type, name, sig, args)); } } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jArgs); } }
/// <summary> /// 上传文件 /// </summary> /// <param name="fileParams">文件参数.</param> /// <param name="parameters">请求参数.</param> /// <param name="resultHandler">返回回调.</param> /// <param name="faultHandler">失败回调.</param> /// <param name="progressHandler">进度回调</param> public void upload( Dictionary <string, HTTPFile> fileParams, Dictionary <string, string> parameters, LuaFunction resultHandler, LuaFunction faultHandler, LuaFunction progressHandler) { _resultHandler = resultHandler; _faultHandler = faultHandler; _uploadProgressHandler = progressHandler; #if UNITY_ANDROID && !UNITY_EDITOR string appPath = luascriptcore.modules.foundation.Path.app(); AndroidJavaObject currentActivity = UNIEnv.getCurrentActivity(); AndroidJavaObject assetManager = currentActivity.Call <AndroidJavaObject> ("getAssets", new object[0]); #endif WWWForm form = new WWWForm(); if (fileParams != null) { foreach (KeyValuePair <string, HTTPFile> kv in fileParams) { HTTPFile file = kv.Value; string path = file.path; byte[] fileData = null; #if UNITY_ANDROID && !UNITY_EDITOR if (path.StartsWith(appPath) || !path.StartsWith("/")) { //应用包内文件 if (path.StartsWith(appPath)) { path = path.Substring(appPath.Length + 1); } AndroidJavaObject inputStream = assetManager.Call <AndroidJavaObject> ("open", path); using (MemoryStream ms = new MemoryStream()) { try { IntPtr buffer = AndroidJNI.NewByteArray(1024); jvalue[] args = new jvalue[1]; args [0].l = buffer; IntPtr readMethodId = AndroidJNIHelper.GetMethodID(inputStream.GetRawClass(), "read", "([B)I"); int hasRead = 0; while ((hasRead = AndroidJNI.CallIntMethod(inputStream.GetRawObject(), readMethodId, args)) != -1) { byte[] byteArray = AndroidJNIHelper.ConvertFromJNIArray <byte[]> (buffer); ms.Write(byteArray, 0, hasRead); } fileData = new byte[ms.Length]; ms.Read(fileData, 0, (int)ms.Length); } finally { ms.Close(); } } } else { #endif FileStream fs = new FileStream(path, FileMode.Open); try { fileData = new byte[fs.Length]; fs.Read(fileData, 0, (int)fs.Length); } finally { fs.Close(); } #if UNITY_ANDROID && !UNITY_EDITOR } #endif if (fileData != null) { form.AddBinaryData(kv.Key, fileData, System.IO.Path.GetFileName(file.path), file.mimeType); } } } if (parameters != null) { foreach (KeyValuePair <string, string> kv in parameters) { form.AddField(kv.Key, kv.Value); } } _request = UnityWebRequest.Post(url, form); if (_request != null) { fillHeaders(); sendRequest(); } }
public byte[] loadExternalFileData(string fileName) { using (var javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject activity = null; AndroidJavaObject stream = null; AndroidJavaObject assetManager = null; try { //取得应用的Activity activity = javaClass.GetStatic <AndroidJavaObject>("currentActivity"); //从Activity取得AssetManager实例 assetManager = activity.Call <AndroidJavaObject>("getAssets"); //打开文件流 stream = assetManager.Call <AndroidJavaObject>("open", fileName); //获取文件长度 var availableBytes = stream.Call <int>("available"); byte[] bytes = null; if (availableBytes > 0) { //取得InputStream.read的MethodID var clsPtr = AndroidJNI.FindClass("java.io.InputStream"); var METHOD_read = AndroidJNIHelper.GetMethodID(clsPtr, "read", "([B)I"); //申请一个Java ByteArray对象句柄 var byteArray = AndroidJNI.NewByteArray(availableBytes); //调用方法 int readCount = AndroidJNI.CallIntMethod(stream.GetRawObject(), METHOD_read, new[] { new jvalue() { l = byteArray } }); //从Java ByteArray中得到C# byte数组 bytes = AndroidJNI.FromByteArray(byteArray); //删除Java ByteArray对象句柄 AndroidJNI.DeleteLocalRef(byteArray); } //关闭文件流 if (stream != null) { stream.Call("close"); stream.Dispose(); } if (assetManager != null) { assetManager.Dispose(); } if (activity != null) { activity.Dispose(); } //返回结果 return(bytes); } catch (System.Exception ex) { //关闭文件流 if (stream != null) { stream.Call("close"); stream.Dispose(); } if (assetManager != null) { assetManager.Dispose(); } if (activity != null) { activity.Dispose(); } GameDebug.LogError("loadExternalFileData error: " + ex.Message); } } return(null); }
public void AndroidSendUpdate() { Debug.Log("AndroidSendUpdate"); AndroidJNI.AttachCurrentThread(); IntPtr instancePtr = AndroidJNI.CallStaticObjectMethod(pluginClass.GetRawClass(), AndroidJNI.GetStaticMethodID(pluginClass.GetRawClass(), "instance", "()Laudiotest/takeleap/com/playsound/PlaySoundExternal;"), new jvalue[] { }); IntPtr currentActivityPtr = AndroidJNI.GetStaticObjectField(unityClass.GetRawClass(), AndroidJNI.GetStaticFieldID(unityClass.GetRawClass(), "currentActivity", "Landroid/app/Activity;")); AndroidJNI.CallVoidMethod(instancePtr, AndroidJNI.GetMethodID(pluginClass.GetRawClass(), "SendVideoAudioProcess", "(ILandroid/content/Context;)V"), new jvalue[] { new jvalue() { i = SkypeManager.Instance.isCaller ? 1 : 2 }, new jvalue() { l = currentActivityPtr } }); IntPtr inputStreamPtr = AndroidJNI.CallObjectMethod(instancePtr, AndroidJNI.GetMethodID(pluginClass.GetRawClass(), "GetSendVideoProcessInputStream", "()Ljava/io/InputStream;"), new jvalue[] { }); IntPtr numsPtr = AndroidJNI.ToByteArray(newData); while (true) { int bytesRead = numDataPerRead; bytesRead = AndroidJNI.CallIntMethod(inputStreamPtr, AndroidJNI.GetMethodID(inputStreamClass.GetRawClass(), "read", "([BII)I"), new jvalue[] { new jvalue() { l = numsPtr }, new jvalue() { i = 0 }, new jvalue() { i = numDataPerRead } }); newData = AndroidJNIHelper.ConvertFromJNIArray <byte[]>(numsPtr); int index = SearchBytePatternAndroid(); Debug.Log("NNN " + bytesRead + " " + index); if (index != -1) { Buffer.BlockCopy(newData, 0, tempData, count, index); count += index; data = new byte[count]; Buffer.BlockCopy(tempData, 0, data, 0, count); index += 2; Buffer.BlockCopy(newData, index, tempData, 0, bytesRead - index); count = bytesRead - index; } else { Buffer.BlockCopy(newData, 0, tempData, count, bytesRead); count += bytesRead; } } AndroidJNI.DeleteLocalRef(numsPtr); }
private static AndroidJavaObject ConvertDictionaryToJavaHashMap(Dictionary <string, string> parameters) { AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap", new object[0]); IntPtr methodID = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); foreach (KeyValuePair <string, string> keyValuePair in parameters) { using (AndroidJavaObject androidJavaObject2 = new AndroidJavaObject("java.lang.String", new object[] { keyValuePair.Key })) { using (AndroidJavaObject androidJavaObject3 = new AndroidJavaObject("java.lang.String", new object[] { keyValuePair.Value })) { AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(new object[] { androidJavaObject2, androidJavaObject3 })); } } } return(androidJavaObject); }
public void LogEvent(string eventId, Dictionary <string, string> parameters, bool timed = false) { using (AndroidJavaObject hashMap = new AndroidJavaObject("java.util.HashMap")) { System.IntPtr method_Put = AndroidJNIHelper.GetMethodID(obj_HashMap.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair <string, string> kvp in parameters) { using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", kvp.Key)) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", kvp.Value)) { args[0] = k; args[1] = v; AndroidJNI.CallObjectMethod(obj_HashMap.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } } } flurryClass.CallStatic <AndroidJavaObject>("logEvent", eventId, hashMap, timed); } }
#pragma warning restore 0414 public static void AndroidApplicationContextSet() { #if UNITY_ANDROID && !UNITY_EDITOR if (haveSetApplicationContext) { return; } haveSetApplicationContext = true; AndroidJavaClass player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject activity = player.GetStatic <AndroidJavaObject>("currentActivity"); // retrieve the Unity Android context AndroidJavaObject[] args = new AndroidJavaObject[1]; args[0] = activity.Call <AndroidJavaObject>("getApplicationContext"); // Retrieve the zappar library IntPtr zcv_JNI = AndroidJNI.FindClass("com/zappar/zcv/ZCV"); bool isStatic = true; string methodSignature = "(Ljava/lang/Object;)V"; string methodName = "android_application_context_set"; // Retrieve the function we want to call IntPtr method_AndroidApplicationContextSet = AndroidJNIHelper.GetMethodID(zcv_JNI, methodName, methodSignature, isStatic); // pass the Unity context to the zappar library AndroidJNI.CallStaticVoidMethod(zcv_JNI, method_AndroidApplicationContextSet, AndroidJNIHelper.CreateJNIArgArray(args)); #endif }
protected AndroidJavaObject dictionaryToHashMap(Dictionary <string, object> dictionary) { // Convert the C# Dictionary<string,object> to a Java Map<String,Object> AndroidJavaObject mapInstance = new AndroidJavaClass("java.util.HashMap"); if (mapInstance == null) { UnityEngine.Debug.LogError("NewRelicAndroid: Could not instantiate HashMap class."); } // Call 'put' via the JNI instead of using helper classes to avoid: // "JNI: Init'd AndroidJavaObject with null ptr!" IntPtr putMethod = AndroidJNIHelper.GetMethodID(mapInstance.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] putCallArgs = new object[2]; if (dictionary != null) { foreach (KeyValuePair <string, object> kvp in dictionary) { var value = kvp.Value; // kvp.Value is read-only if (!(value is string || kvp.Value is double)) { try { value = Double.Parse(value.ToString()); } catch (Exception e) { UnityEngine.Debug.LogErrorFormat("Coercion from [{0}] to [{1}] failed: {2}", kvp.Key.GetType(), Double.MaxValue.GetType(), e.Message); } } if (value is string || value is double) { using (AndroidJavaObject k = new AndroidJavaObject("java.lang.String", (object)kvp.Key)) { if (value is string) { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.String", (object)value)) { putCallArgs [0] = k; putCallArgs [1] = v; AndroidJNI.CallObjectMethod(mapInstance.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(putCallArgs)); } } else { using (AndroidJavaObject v = new AndroidJavaObject("java.lang.Double", (object)value)) { putCallArgs [0] = k; putCallArgs [1] = v; AndroidJNI.CallObjectMethod(mapInstance.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(putCallArgs)); } } } } else { UnityEngine.Debug.LogError("NewRelicAndroid: Unsupported type - value must be either string or double: " + kvp.Value); return(null); } } } return(mapInstance); }
private static IntPtr GetStaticMethod(IntPtr classRaw, string name, string signature) { return(AndroidJNIHelper.GetMethodID(classRaw, name, signature, true)); }
// Calls a custom Graph API method with the key/value pairs in the Dictionary. Pass in a null dictionary if no parameters are needed. public static void graphRequest(string graphPath, string httpMethod, Dictionary <string, string> parameters) { if (Application.platform != RuntimePlatform.Android) { return; } // load up the Bundle using (var bundle = new AndroidJavaObject("android.os.Bundle")) { var putStringMethod = AndroidJNI.GetMethodID(bundle.GetRawClass(), "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); var args = new object[2]; // add all our dictionary elements into the Bundle if (parameters != null) { foreach (var kv in parameters) { args[0] = new AndroidJavaObject("java.lang.String", kv.Key); args[1] = new AndroidJavaObject("java.lang.String", kv.Value); AndroidJNI.CallObjectMethod(bundle.GetRawObject(), putStringMethod, AndroidJNIHelper.CreateJNIArgArray(args)); } } // call off to java land _facebookPlugin.Call("graphRequest", graphPath, httpMethod, bundle); } }
void Start() { if (!Application.isEditor) { // First, obtain the current activity context using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { playerActivityContext = jc.GetStatic <AndroidJavaObject>("currentActivity"); } // Search for our class IntPtr classID = AndroidJNI.FindClass("com/intel/inde/mp/samples/unity/Capturing"); // com.intel.inde.mp.samples.unity // com/intel/penelope/Capturing // Search for it's contructor constructorMethodID = AndroidJNI.GetMethodID(classID, "<init>", "(Landroid/content/Context;II)V"); if (constructorMethodID == IntPtr.Zero) { Debug.LogError("Can't find Capturing constructor."); return; } // Register our methods initCapturingMethodID = AndroidJNI.GetMethodID(classID, "initCapturing", "(IIII)V"); if (initCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find initCapturing() method."); return; } startCapturingMethodID = AndroidJNI.GetMethodID(classID, "startCapturing", "(Ljava/lang/String;)V"); if (startCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find startCapturing() method."); return; } captureFrameMethodID = AndroidJNI.GetMethodID(classID, "captureFrame", "(I)V"); if (captureFrameMethodID == IntPtr.Zero) { Debug.LogError("Can't find captureFrame() method."); return; } stopCapturingMethodID = AndroidJNI.GetMethodID(classID, "stopCapturing", "()V"); if (stopCapturingMethodID == IntPtr.Zero) { Debug.LogError("Can't find stopCapturingMethodID() method."); return; } // Register and call our static method getDirectoryDCIMMethodID = AndroidJNI.GetStaticMethodID(classID, "getDirectoryDCIM", "()Ljava/lang/String;"); jvalue[] args = new jvalue[0]; videoDir = AndroidJNI.CallStaticStringMethod(classID, getDirectoryDCIMMethodID, args); // Create Capturing object jvalue[] constructorParameters = AndroidJNIHelper.CreateJNIArgArray(new object[] { playerActivityContext, Screen.width, Screen.height }); IntPtr local_capturingObject = AndroidJNI.NewObject(classID, constructorMethodID, constructorParameters); if (local_capturingObject == IntPtr.Zero) { Debug.LogError("--- Can't create Capturing object."); return; } // Keep a global reference to it capturingObject = AndroidJNI.NewGlobalRef(local_capturingObject); AndroidJNI.DeleteLocalRef(local_capturingObject); AndroidJNI.DeleteLocalRef(classID); } isRunning = false; Debug.Log("--- videoFrameRate = " + videoFrameRate); Debug.Log("--- 1.0f / videoFrameRate = " + 1.0f / videoFrameRate); }
public static void OnEvent(string actionId, Dictionary <string, object> parameters) { if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor) { if (parameters != null && parameters.Count > 0) { int count = parameters.Count; AndroidJavaObject androidJavaObject = new AndroidJavaObject("java.util.HashMap", new object[] { count }); IntPtr methodID = AndroidJNIHelper.GetMethodID(androidJavaObject.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] array = new object[2]; foreach (KeyValuePair <string, object> current in parameters) { array[0] = new AndroidJavaObject("java.lang.String", new object[] { current.Key }); if (typeof(string).IsInstanceOfType(current.Value)) { array[1] = new AndroidJavaObject("java.lang.String", new object[] { current.Value }); } else { array[1] = new AndroidJavaObject("java.lang.Double", new object[] { string.Empty + current.Value }); } AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), methodID, AndroidJNIHelper.CreateJNIArgArray(array)); } if (TalkingDataGA.agent != null) { TalkingDataGA.agent.CallStatic("onEvent", new object[] { actionId, androidJavaObject }); } } else if (TalkingDataGA.agent != null) { AndroidJavaObject arg_177_0 = TalkingDataGA.agent; string arg_177_1 = "onEvent"; object[] expr_173 = new object[2]; expr_173[0] = actionId; arg_177_0.CallStatic(arg_177_1, expr_173); } } }
static AssetInputStream() { var classPtr = AndroidJNI.FindClass("java/io/InputStream"); kMethodPtr_Read = AndroidJNIHelper.GetMethodID(classPtr, "read", "([B)I"); }
public T InvokeCall <T>(string name, string sig, params object[] args) { Type t = typeof(T); IntPtr method = AndroidJNI.GetMethodID(RawClass, name, sig); if (method == IntPtr.Zero) { Debug.LogError("Cannot get method for " + name); throw new Exception("Cannot get method for " + name); } jvalue[] jArgs = ConstructArgArray(args); try { if (t == typeof(bool)) { return((T)(object)AndroidJNI.CallBooleanMethod(raw, method, jArgs)); } else if (t == typeof(string)) { return((T)(object)AndroidJNI.CallStringMethod(raw, method, jArgs)); } else if (t == typeof(int)) { return((T)(object)AndroidJNI.CallIntMethod(raw, method, jArgs)); } else if (t == typeof(float)) { return((T)(object)AndroidJNI.CallFloatMethod(raw, method, jArgs)); } else if (t == typeof(double)) { return((T)(object)AndroidJNI.CallDoubleMethod(raw, method, jArgs)); } else if (t == typeof(byte)) { return((T)(object)AndroidJNI.CallByteMethod(raw, method, jArgs)); } else if (t == typeof(char)) { return((T)(object)AndroidJNI.CallCharMethod(raw, method, jArgs)); } else if (t == typeof(long)) { return((T)(object)AndroidJNI.CallLongMethod(raw, method, jArgs)); } else if (t == typeof(short)) { return((T)(object)AndroidJNI.CallShortMethod(raw, method, jArgs)); } else if (t == typeof(IntPtr)) { return((T)(object)AndroidJNI.CallObjectMethod(raw, method, jArgs)); } else { return(InvokeObjectCall <T>(name, sig, args)); } } finally { AndroidJNIHelper.DeleteJNIArgArray(args, jArgs); } }
public NativeInterface(AndroidJavaObject config) { using (var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (var activity = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity")) using (var context = activity.Call <AndroidJavaObject>("getApplicationContext")) { // lookup the NativeInterface class and set the client to the local object. // all subsequent communication should go through the NativeInterface. var client = new AndroidJavaObject("com.bugsnag.android.Client", context, config); var nativeInterfaceRef = AndroidJNI.FindClass("com/bugsnag/android/NativeInterface"); BugsnagNativeInterface = AndroidJNI.NewGlobalRef(nativeInterfaceRef); AndroidJNI.DeleteLocalRef(nativeInterfaceRef); var setClient = AndroidJNI.GetStaticMethodID(BugsnagNativeInterface, "setClient", "(Lcom/bugsnag/android/Client;)V"); jvalue[] args = AndroidJNIHelper.CreateJNIArgArray(new object[] { client }); AndroidJNI.CallStaticVoidMethod(BugsnagNativeInterface, setClient, args); // Cache JNI refs which will be used to load report data later in the // app lifecycle to avoid repeated lookups var unityRef = AndroidJNI.FindClass("com/bugsnag/android/unity/BugsnagUnity"); BugsnagUnityClass = AndroidJNI.NewGlobalRef(unityRef); AndroidJNI.DeleteLocalRef(unityRef); var crumbRef = AndroidJNI.FindClass("com/bugsnag/android/Breadcrumb"); BreadcrumbClass = AndroidJNI.NewGlobalRef(crumbRef); AndroidJNI.DeleteLocalRef(crumbRef); var crumbTypeRef = AndroidJNI.FindClass("com/bugsnag/android/BreadcrumbType"); BreadcrumbTypeClass = AndroidJNI.NewGlobalRef(crumbTypeRef); AndroidJNI.DeleteLocalRef(crumbTypeRef); var collectionRef = AndroidJNI.FindClass("java/util/Collection"); CollectionClass = AndroidJNI.NewGlobalRef(collectionRef); AndroidJNI.DeleteLocalRef(collectionRef); var iterRef = AndroidJNI.FindClass("java/util/Iterator"); IteratorClass = AndroidJNI.NewGlobalRef(iterRef); AndroidJNI.DeleteLocalRef(iterRef); var listRef = AndroidJNI.FindClass("java/util/List"); ListClass = AndroidJNI.NewGlobalRef(listRef); AndroidJNI.DeleteLocalRef(listRef); var mapRef = AndroidJNI.FindClass("java/util/Map"); MapClass = AndroidJNI.NewGlobalRef(mapRef); AndroidJNI.DeleteLocalRef(mapRef); var entryRef = AndroidJNI.FindClass("java/util/Map$Entry"); MapEntryClass = AndroidJNI.NewGlobalRef(entryRef); AndroidJNI.DeleteLocalRef(entryRef); var setRef = AndroidJNI.FindClass("java/util/Set"); SetClass = AndroidJNI.NewGlobalRef(setRef); AndroidJNI.DeleteLocalRef(setRef); BreadcrumbGetMetadata = AndroidJNI.GetMethodID(BreadcrumbClass, "getMetadata", "()Ljava/util/Map;"); BreadcrumbGetType = AndroidJNI.GetMethodID(BreadcrumbClass, "getType", "()Lcom/bugsnag/android/BreadcrumbType;"); BreadcrumbGetTimestamp = AndroidJNI.GetMethodID(BreadcrumbClass, "getTimestamp", "()Ljava/lang/String;"); BreadcrumbGetName = AndroidJNI.GetMethodID(BreadcrumbClass, "getName", "()Ljava/lang/String;"); CollectionIterator = AndroidJNI.GetMethodID(CollectionClass, "iterator", "()Ljava/util/Iterator;"); IteratorHasNext = AndroidJNI.GetMethodID(IteratorClass, "hasNext", "()Z"); IteratorNext = AndroidJNI.GetMethodID(IteratorClass, "next", "()Ljava/lang/Object;"); MapEntryGetKey = AndroidJNI.GetMethodID(MapEntryClass, "getKey", "()Ljava/lang/Object;"); MapEntryGetValue = AndroidJNI.GetMethodID(MapEntryClass, "getValue", "()Ljava/lang/Object;"); MapEntrySet = AndroidJNI.GetMethodID(MapClass, "entrySet", "()Ljava/util/Set;"); var objectRef = AndroidJNI.FindClass("java/lang/Object"); ObjectToString = AndroidJNI.GetMethodID(objectRef, "toString", "()Ljava/lang/String;"); ObjectGetClass = AndroidJNI.GetMethodID(objectRef, "getClass", "()Ljava/lang/Class;"); AndroidJNI.DeleteLocalRef(objectRef); var classRef = AndroidJNI.FindClass("java/lang/Class"); ClassIsArray = AndroidJNI.GetMethodID(classRef, "isArray", "()Z"); AndroidJNI.DeleteLocalRef(classRef); // the bugsnag-android notifier uses Activity lifecycle tracking to // determine if the application is in the foreground. As the unity // activity has already started at this point we need to tell the // notifier about the activity and the fact that it has started. using (var sessionTracker = client.Get <AndroidJavaObject>("sessionTracker")) using (var activityClass = activity.Call <AndroidJavaObject>("getClass")) { string activityName = null; var activityNameObject = activityClass.Call <AndroidJavaObject>("getSimpleName"); if (activityNameObject != null) { activityName = AndroidJNI.GetStringUTFChars(activityNameObject.GetRawObject()); } sessionTracker.Call("updateForegroundTracker", activityName, true, 0L); } } }
public static void TrackEventWithParameters(string eventId, string eventLabel, Dictionary <string, object> parameters) { // Call plugin only when running on real device if (Application.platform != RuntimePlatform.OSXEditor && Application.platform != RuntimePlatform.WindowsEditor) { #if UNITY_IPHONE if (parameters != null && parameters.Count > 0) { int count = parameters.Count; string [] keys = new string[count]; string [] stringValues = new string[count]; double [] numberValues = new double[count]; int index = 0; foreach (KeyValuePair <string, object> kvp in parameters) { if (kvp.Value is string) { keys[index] = kvp.Key; stringValues[index] = (string)kvp.Value; } else { try { double tmp = System.Convert.ToDouble(kvp.Value); numberValues[index] = tmp; keys[index] = kvp.Key; } catch (System.Exception) { count--; continue; } } index++; } tdTrackEventParameters(eventId, eventLabel, keys, stringValues, numberValues, count); } else { tdTrackEventLabel(eventId, eventLabel); } #endif #if UNITY_ANDROID if (parameters != null && parameters.Count > 0) { int count = parameters.Count; AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap", count); IntPtr method_Put = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); object[] args = new object[2]; foreach (KeyValuePair <string, object> kvp in parameters) { args[0] = new AndroidJavaObject("java.lang.String", kvp.Key); if (typeof(System.String).IsInstanceOfType(kvp.Value)) { args[1] = new AndroidJavaObject("java.lang.String", kvp.Value); } else { args[1] = new AndroidJavaObject("java.lang.Double", "" + kvp.Value); } AndroidJNI.CallObjectMethod(map.GetRawObject(), method_Put, AndroidJNIHelper.CreateJNIArgArray(args)); } AndroidJavaClass tCAgent = new AndroidJavaClass("com.tendcloud.tenddata.TCAgent"); AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currActivity = unityClass.GetStatic <AndroidJavaObject>("currentActivity"); tCAgent.CallStatic("onEvent", currActivity, eventId, eventLabel, map); } else { AndroidJavaClass tCAgent = new AndroidJavaClass("com.tendcloud.tenddata.TCAgent"); AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currActivity = unityClass.GetStatic <AndroidJavaObject>("currentActivity"); tCAgent.CallStatic("onEvent", currActivity, eventId, eventLabel); } #endif } }