public static bool ForceLoadLowLevelBinary() { // This is a hack that forces Android to load the .so libraries in the correct order #if UNITY_ANDROID && !UNITY_EDITOR if (FMOD.VERSION.number >= 0x00010500) { AndroidJavaObject activity = null; // First, obtain the current activity context using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { activity = actClass.GetStatic<AndroidJavaObject>("currentActivity"); } UnityEngine.Debug.Log("FMOD ANDROID AUDIOTRACK: " + (activity == null ? "ERROR NO ACTIVITY" : "VALID ACTIVITY!")); using (var fmodJava = new AndroidJavaClass("org.fmod.FMOD")) { if (fmodJava != null) { UnityEngine.Debug.Log("FMOD ANDROID AUDIOTRACK: assigning activity to fmod java"); fmodJava.CallStatic("init", activity); } else { UnityEngine.Debug.Log("FMOD ANDROID AUDIOTRACK: ERROR NO FMOD JAVA"); } } } FMOD.Studio.UnityUtil.Log("loading binaries: " + FMOD.Studio.STUDIO_VERSION.dll + " and " + FMOD.VERSION.dll); AndroidJavaClass jSystem = new AndroidJavaClass("java.lang.System"); jSystem.CallStatic("loadLibrary", FMOD.VERSION.dll); jSystem.CallStatic("loadLibrary", FMOD.Studio.STUDIO_VERSION.dll); #endif // Hack: force the low level binary to be loaded before accessing Studio API #if !UNITY_IPHONE || UNITY_EDITOR FMOD.Studio.UnityUtil.Log("Attempting to call Memory_GetStats"); int temp1, temp2; if (!ERRCHECK(FMOD.Memory.GetStats(out temp1, out temp2))) { FMOD.Studio.UnityUtil.LogError("Memory_GetStats returned an error"); return false; } FMOD.Studio.UnityUtil.Log("Calling Memory_GetStats succeeded!"); #endif return true; }
// Use: // runOnAndroidUiThread(someMethod) public static void runOnAndroidUiThread(Action target) { // Calls an Android activity on the UI Thread (needed for some interactions with Views) using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) { #if USE_ANDROID activity.Call("runOnUiThread", new AndroidJavaRunnable(target)); #else Debug.Log("[Android] Would call [" + target + "] later on the UI thread"); #endif //string a = activity.Call<string>("someNomw", param); //window.Call("setFlags", flagsValue, -1); // (int)0x7FFFFFFF //window.Call("setStatusBarColor", unchecked((int)_statusBarColor)); // for an uint } } }
public static AndroidJavaObject GetAdSizeJavaObject(AdSize adSize) { switch (adSize.AdType) { case AdSize.Type.SmartBanner: // AndroidJavaClass.GetStatic<AndroidJavaObject>() returns null since Unity 2019.2. // Creates an AdSize object by directly calling the constructor, as a workaround. return(new AndroidJavaObject(AdSizeClassName, -1, -2) .GetStatic <AndroidJavaObject>("SMART_BANNER")); case AdSize.Type.AnchoredAdaptive: AndroidJavaClass adSizeClass = new AndroidJavaClass(AdSizeClassName); AndroidJavaClass playerClass = new AndroidJavaClass(Utils.UnityActivityClassName); AndroidJavaObject activity = playerClass.GetStatic <AndroidJavaObject>("currentActivity"); switch (adSize.Orientation) { case Orientation.Landscape: return(adSizeClass.CallStatic <AndroidJavaObject>("getLandscapeBannerAdSizeWithWidth", activity, adSize.Width)); case Orientation.Portrait: return(adSizeClass.CallStatic <AndroidJavaObject>("getPortraitBannerAdSizeWithWidth", activity, adSize.Width)); case Orientation.Current: return(adSizeClass.CallStatic <AndroidJavaObject>("getCurrentOrientationBannerAdSizeWithWidth", activity, adSize.Width)); default: throw new ArgumentException("Invalid Orientation provided for ad size."); } case AdSize.Type.Standard: return(new AndroidJavaObject(AdSizeClassName, adSize.Width, adSize.Height)); default: throw new ArgumentException("Invalid AdSize.Type provided for ad size."); } }
public bool CheckAppInstallation(string bundleId) { bool installed = false; AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject ca = up.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject pm = ca.Call <AndroidJavaObject>("getPackageManager"); AndroidJavaObject launchIntent = null; try { launchIntent = pm.Call <AndroidJavaObject>("getLaunchIntentForPackage", bundleId); if (launchIntent == null) { installed = false; } else { installed = true; } } catch (System.Exception e) { SGDebug.Exception(e); installed = false; } // dispose up.Dispose(); ca.Dispose(); pm.Dispose(); launchIntent.Dispose(); return(installed); }
public static void Init(string appID, CrittercismConfig config) { #if CRITTERCISM_ANDROID if (isInitialized) { UnityEngine.Debug.Log("CrittercismAndroid is already initialized."); return; } UnityEngine.Debug.Log("Initializing Crittercism with app id " + appID); mCrittercismsPlugin = new AndroidJavaClass(CRITTERCISM_CLASS); if (mCrittercismsPlugin == null) { UnityEngine.Debug.Log("CrittercismAndroid failed to initialize. Unable to find class " + CRITTERCISM_CLASS); return; } using (var cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (var objActivity = cls_UnityPlayer.GetStatic <AndroidJavaObject> ("currentActivity")) { PluginCallStatic("initialize", objActivity, appID, config.GetAndroidConfig()); } } // Unity does not currently support the C# UnhandledException callback. // They're aware of the issue. When the fix this, we should use this instead of the log callback // System.AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; #if UNITY_5 || UNITY_5_3_OR_NEWER Application.logMessageReceived += OnLogMessageReceived; #else Application.RegisterLogCallback(OnLogMessageReceived); #endif isInitialized = true; #endif }
void HideNavigationBar() { #if UNITY_ANDROID lock (this) { using (javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { unityActivity = javaClass.GetStatic <AndroidJavaObject>("currentActivity"); } if (unityActivity == null) { return; } using (javaClass = new AndroidJavaClass("com.rak24.androidimmersivemode.Main")) { if (javaClass == null) { return; } else { javaObj = javaClass.CallStatic <AndroidJavaObject>("instance"); if (javaObj == null) { return; } unityActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { javaObj.Call("EnableImmersiveMode", unityActivity); })); } } } #endif }
public IEnumerator ShareTextInAnroid() { var shareSubject = "Dessin Cerealis"; var shareMessage = "Regarde comme il est beau mon dessin"; isProcessing = true; if (!Application.isEditor) { //Create intent for action send AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); intentObject.Call <AndroidJavaObject> ("setAction", intentClass.GetStatic <string>("ACTION_SEND")); //put text and subject extra intentObject.Call <AndroidJavaObject>("setType", "text/plain"); intentObject.Call <AndroidJavaObject> ("putExtra", intentClass.GetStatic <string>("EXTRA_SUBJECT"), shareSubject); intentObject.Call <AndroidJavaObject> ("putExtra", intentClass.GetStatic <string>("EXTRA_TEXT"), shareMessage); //call createChooser method of activity class AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject chooser = intentClass.CallStatic <AndroidJavaObject> ("createChooser", intentObject, "Share your high score"); currentActivity.Call("startActivity", chooser); } yield return(new WaitUntil(() => isFocus)); isProcessing = false; }
static DisplayMetricsAndroid() { // Early out if we're not on an Android device if (Application.platform != RuntimePlatform.Android) { return; } // The following is equivalent to this Java code: // // metricsInstance = new DisplayMetrics(); // UnityPlayer.currentActivity.getWindowManager().getDefaultDisplay().getMetrics(metricsInstance); // // ... which is pretty much equivalent to the code on this page: // http://developer.android.com/reference/android/util/DisplayMetrics.html using ( AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"), metricsClass = new AndroidJavaClass("android.util.DisplayMetrics") ) { using ( AndroidJavaObject metricsInstance = new AndroidJavaObject("android.util.DisplayMetrics"), activityInstance = unityPlayerClass.GetStatic <AndroidJavaObject>("currentActivity"), windowManagerInstance = activityInstance.Call <AndroidJavaObject>("getWindowManager"), displayInstance = windowManagerInstance.Call <AndroidJavaObject>("getDefaultDisplay") ) { displayInstance.Call("getMetrics", metricsInstance); Density = metricsInstance.Get <float>("density"); DensityDPI = metricsInstance.Get <int>("densityDpi"); HeightPixels = metricsInstance.Get <int>("heightPixels"); WidthPixels = metricsInstance.Get <int>("widthPixels"); ScaledDensity = metricsInstance.Get <float>("scaledDensity"); XDPI = metricsInstance.Get <float>("xdpi"); YDPI = metricsInstance.Get <float>("ydpi"); } } }
public static void Init(string apiKey, bool captureUncaughtExceptions = false) { FlurryAnalyticsAndroid.DebugLog(string.Concat(new object[] { "Init with key: ", apiKey, " capture exceptions: ", captureUncaughtExceptions })); if (!FlurryAnalyticsAndroid.IsAndroidPlayer()) { return; } if (apiKey != null) { apiKey = apiKey.ToUpper(); } if (string.IsNullOrEmpty(apiKey)) { FlurryAnalyticsAndroid.DebugLogError("Android API key is null or empty, please provide valid API key"); } using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject @static = androidJavaClass.GetStatic <AndroidJavaObject>("currentActivity")) { FlurryAnalyticsAndroid.Flurry.CallStatic("setCaptureUncaughtExceptions", new object[] { captureUncaughtExceptions }); FlurryAnalyticsAndroid.Flurry.CallStatic("init", new object[] { @static, apiKey.ToUpper() }); } } }
IEnumerator CRSaveScreenshot() { yield return(new WaitForEndOfFrame()); // string TwoStepScreenshotPath = MobileNativeShare.SaveScreenshot("Screenshot" + System.DateTime.Now.Hour + System.DateTime.Now.Minute + System.DateTime.Now.Second); // Debug.Log("A new screenshot was saved at " + TwoStepScreenshotPath); string myFileName = "Screenshot" + System.DateTime.Now.Hour + System.DateTime.Now.Minute + System.DateTime.Now.Second + ".png"; string myDefaultLocation = Application.persistentDataPath + "/" + myFileName; string myFolderLocation = "/storage/emulated/0/DCIM/Parida/"; //EXAMPLE OF DIRECTLY ACCESSING A CUSTOM FOLDER OF THE GALLERY string myScreenshotLocation = myFolderLocation + myFileName; //ENSURE THAT FOLDER LOCATION EXISTS if (!System.IO.Directory.Exists(myFolderLocation)) { System.IO.Directory.CreateDirectory(myFolderLocation); } MenuManager.Instance.viewModePanel.SetActive(false); yield return(new WaitForSeconds(1)); ScreenCapture.CaptureScreenshot(myFileName); yield return(new WaitForSeconds(1)); MenuManager.Instance.viewModePanel.SetActive(true); System.IO.File.Move(myDefaultLocation, myScreenshotLocation); //MOVE THE SCREENSHOT WHERE WE WANT IT TO BE STORED //REFRESHING THE ANDROID PHONE PHOTO GALLERY IS BEGUN AndroidJavaClass classPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject objActivity = classPlayer.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaClass classUri = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject objIntent = new AndroidJavaObject("android.content.Intent", new object[2] { "android.intent.action.MEDIA_MOUNTED", classUri.CallStatic <AndroidJavaObject>("parse", "file://" + myScreenshotLocation) }); objActivity.Call("sendBroadcast", objIntent); //REFRESHING THE ANDROID PHONE PHOTO GALLERY IS COMPLETE }
//Returns true if YipliApp is installed, else returns false public static bool IsYipliAppInstalled() { #if UNITY_EDITOR return(true); #elif UNITY_ANDROID AndroidJavaObject launchIntent = null; try { AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject ca = up.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject packageManager = ca.Call <AndroidJavaObject>("getPackageManager"); Debug.Log(" Quering if Yipli App is installed."); //if the app is installed, no errors. Else, doesn't get past next line launchIntent = packageManager.Call <AndroidJavaObject>("getLaunchIntentForPackage", yipliAppBundleId); } catch (Exception ex) { Debug.Log("exception" + ex.Message); } if (launchIntent == null) { Debug.Log("Yipli app is not installed."); return(false); } Debug.Log("Yipli App is Installed. Returning true."); return(true); #elif UNITY_STANDALONE_WIN || UNITY_EDITOR // TODO : Handle Windows flow Debug.Log("Yipli App validation for windows isnt required. Returning true"); return(FileReadWrite.IsYipliPcIsInstalled()); #else Debug.Log("OS not supported. Returnin false."); return(false); #endif }
public static void Init(string appid, bool debug, int zoneid) { try { GSDKUtils.isDebug = debug; GSDKUtils.Logger("gsdk mna init"); GSDK.sGSDKPlatformClass = new AndroidJavaClass("com.tencent.gsdk.GSDKPlatform"); AndroidJavaObject androidJavaObject = null; using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { androidJavaObject = androidJavaClass.GetStatic <AndroidJavaObject>("currentActivity"); } if (GSDK.sGSDKPlatformClass != null) { androidJavaObject.Call("runOnUiThread", new object[] { delegate { GSDK.sGSDKPlatformClass.CallStatic("GSDKInit", new object[] { appid, debug, zoneid }); GSDK.sGSDKPlatformClass.CallStatic("GSDKSetObserver", new object[] { GSDKAndroidObserver.Instance }); } }); } } catch (Exception ex) { Debug.Log("catch ex " + ex.ToString()); } }
protected string _ratioCalculate; // bien string de lay 3 ky tu dau cua day so: 1.7 hoac 1.6 // Use this for initialization void Awake() { // early out if we are not on an android device if (Application.platform != RuntimePlatform.Android) { return; } using ( AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"), metricsClass = new AndroidJavaClass("android.util.DisplayMetrics")) { using ( AndroidJavaObject metricsInstance = new AndroidJavaObject("android.util.DisplayMetrics"), activityInstance = unityPlayerClass.GetStatic <AndroidJavaObject> ("currentActivity"), windowManagerInstance = activityInstance.Call <AndroidJavaObject> ("getWindowManager"), displayInstance = windowManagerInstance.Call <AndroidJavaObject> ("getDefaultDisplay")) { displayInstance.Call("getMetrics", metricsInstance); Density = metricsInstance.Get <float> ("density"); DensityDPI = metricsInstance.Get <int> ("densityDpi"); HeightPixels = metricsInstance.Get <int> ("heightPixels"); WidthPixels = metricsInstance.Get <int> ("widthPixels"); ScaledDensity = metricsInstance.Get <float> ("scaledDensity"); XDPI = metricsInstance.Get <float> ("xdpi"); YDPI = metricsInstance.Get <float> ("ydpi"); } } float heightOfphone = float.Parse(HeightPixels.ToString()); float widthOfphone = float.Parse(WidthPixels.ToString()); //string[] lines = { heightOfphone, widthOfphone}; //string path = Path.Combine(Application.persistentDataPath+"/", "indexofscreen.bin"); //File.WriteAllLines (path,lines); _calculate = widthOfphone / heightOfphone; _result = _calculate.ToString(); _ratioCalculate = _result.Substring(0, 6); }
public static void NewNotificationRepeat(int id, string title, string content, int day, int hour, int minute, int second) { if (Application.isEditor) { } else { #if UNITY_ANDROID //android 不能设置重复 只能设置一定次数.. AndroidJavaClass dsActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActicity = dsActivity.GetStatic <AndroidJavaObject>("currentActivity"); for (int i = 0; i < 10; i++) { currentActicity.Call("NewNotificationRepeat", new object[] { id, title, content, i * day, hour, minute, second }); } #endif #if UNITY_IPHONE //IOS 可以直接设置重复.. if (day == 7) { IOS_NotificationMessageRepeat(content, hour, minute, second, CalendarUnit.Week); } else if (day == 30) { IOS_NotificationMessageRepeat(content, hour, minute, second, CalendarUnit.Month); } else if (day == 365) { IOS_NotificationMessageRepeat(content, hour, minute, second, CalendarUnit.Year); } else { IOS_NotificationMessageRepeat(content, hour, minute, second, CalendarUnit.Day); } #endif } }
public void OpenAndroidGallery() { #region [ Intent intent = new Intent(); ] //instantiate the class Intent AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); //instantiate the object Intent AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); #endregion [ Intent intent = new Intent(); ] #region [ intent.setAction(Intent.ACTION_PICK); ] //call setAction setting ACTION_SEND as parameter intentObject.Call <AndroidJavaObject>("setAction", intentClass.GetStatic <string>("ACTION_PICK")); #endregion [ intent.setAction(Intent.ACTION_PICK); ] #region [ intent.setData(Uri.parse("content: //media/internal/images/media")); ] //instantiate the class Uri AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); //instantiate the object Uri with the parse of the url's file AndroidJavaObject uriObject = uriClass.CallStatic <AndroidJavaObject>("parse", "content://media/internal/images/media"); //call putExtra with the uri object of the file intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_STREAM"), uriObject); #endregion [ intent.setData(Uri.parse("content: //media/internal/images/media")); ] //set the type of file intentObject.Call <AndroidJavaObject>("setType", "image/jpeg"); #region [ startActivity(intent); ] //instantiate the class UnityPlayer AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //instantiate the object currentActivity AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity"); //call the activity with our Intent currentActivity.Call("startActivity", intentObject); #endregion [ startActivity(intent); ] }
public IEnumerator ShareScreenshotInAnroid() { isProcessing = true; yield return(new WaitForEndOfFrame()); yield return(new WaitForSecondsRealtime(0.25f)); string screenShotPath = Application.persistentDataPath + "/" + screenshotName; ScreenCapture.CaptureScreenshot(screenshotName, 1); yield return(new WaitForSecondsRealtime(0.25f)); if (!Application.isEditor) { AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); intentObject.Call <AndroidJavaObject>("setAction", intentClass.GetStatic <string>("ACTION_SEND")); AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uriObject = uriClass.CallStatic <AndroidJavaObject>("parse", "file://" + screenShotPath); intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_STREAM"), uriObject); intentObject.Call <AndroidJavaObject>("setType", "image/png"); intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_SUBJECT"), shareSubject); intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_TEXT"), shareMessage); AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject chooser = intentClass.CallStatic <AndroidJavaObject>("createChooser", intentObject, "Share your high score"); currentActivity.Call("startActivity", chooser); } yield return(new WaitUntil(() => isFocus)); isProcessing = false; }
void opponentPictureLoaded(string id) { //print("got pic"); using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject obj_Activity = cls_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { AndroidJavaClass cls_CompassActivity = new AndroidJavaClass("com.tapinator.tank.simulator.MainActivity"); byte[] byteArray = cls_CompassActivity.CallStatic <byte[]>("getOpponentImage", id); if (byteArray == null) { return; } //print ("1"); //foreach (OpponentData op in opponents) { for (int i = 0; i < opponents.Count; i++) { OpponentData op = (OpponentData)opponents[i]; //print ("2"); if (op.opponentID.Equals(id)) { //print ("3"); Texture2D tex = new Texture2D(4, 4); tex.LoadImage(byteArray); op.opponentPicture = tex; //print ("4"); if (mPictureCallBacks != null) { //print ("5"); mPictureCallBacks.OpponentPictureLoaded(id, tex); } break; } } } } }
IEnumerator ShareScreenshot() { isProcessing = true; yield return(new WaitForEndOfFrame()); ScreenCapture.CaptureScreenshot("screenshot.png", 2); string destination = Path.Combine(Application.persistentDataPath, "screenshot.png"); yield return(new WaitForSecondsRealtime(0.3f)); if (!Application.isEditor) { AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent"); intentObject.Call <AndroidJavaObject>("setAction", intentClass.GetStatic <string>("ACTION_SEND")); AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uriObject = uriClass.CallStatic <AndroidJavaObject>("parse", "file://" + destination); intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_STREAM"), uriObject); intentObject.Call <AndroidJavaObject>("putExtra", intentClass.GetStatic <string>("EXTRA_TEXT"), "Can you beat my score?"); intentObject.Call <AndroidJavaObject>("setType", "image/jpeg"); AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject chooser = intentClass.CallStatic <AndroidJavaObject>("createChooser", intentObject, "Share your new score"); currentActivity.Call("startActivity", chooser); yield return(new WaitForSecondsRealtime(1)); } yield return(new WaitUntil(() => isFocus)); // CanvasShareObj.SetActive(false); isProcessing = false; }
public static void OpenFile(string url, string dataType = "application/pdf") { AndroidJavaObject clazz = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = clazz.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent"); intent.Call <AndroidJavaObject>("addFlags", intent.GetStatic <int>("FLAG_GRANT_READ_URI_PERMISSION")); intent.Call <AndroidJavaObject>("setAction", intent.GetStatic <string>("ACTION_VIEW")); var apiLevel = new AndroidJavaClass("android.os.Build$VERSION").GetStatic <int>("SDK_INT"); AndroidJavaObject uri; if (apiLevel > 23) { AndroidJavaClass fileProvider = new AndroidJavaClass("android.support.v4.content.FileProvider"); AndroidJavaObject file = new AndroidJavaObject("java.io.File", url); AndroidJavaObject unityContext = currentActivity.Call <AndroidJavaObject>("getApplicationContext"); string packageName = unityContext.Call <string>("getPackageName"); string authority = packageName + ".fileprovider"; uri = fileProvider.CallStatic <AndroidJavaObject>("getUriForFile", unityContext, authority, file); } else { var uriClazz = new AndroidJavaClass("android.net.Uri"); var file = new AndroidJavaObject("java.io.File", url); uri = uriClazz.CallStatic <AndroidJavaObject>("fromFile", file); } intent.Call <AndroidJavaObject>("setType", dataType); intent.Call <AndroidJavaObject>("setData", uri); currentActivity.Call("startActivity", intent); }
private static void AndroidConfigure(string token, string bundleId, string unitName) { if (!dre_initialized) { AndroidInitializePlugin(); } // Prepare call arguments. class_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var j_activity = class_UnityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); var j_token = AndroidJNI.NewStringUTF(token); var j_bundleId = AndroidJNI.NewStringUTF(bundleId); var j_unitName = AndroidJNI.NewStringUTF(unitName); // Call UnityDre.configure( token, bundleId, unitName ) jvalue[] args = new jvalue[4]; args[0].l = j_activity.GetRawObject(); args[1].l = j_token; args[2].l = j_bundleId; args[3].l = j_unitName; AndroidJNI.CallStaticVoidMethod(class_UnityDre, method_configure, args); configured = true; }
public IEnumerator TakeScreenshot() { Debug.Log("Capture"); yield return(new WaitForEndOfFrame()); string name = System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); string myFilename = name + ".png"; string myDefaultLocation = Application.persistentDataPath + "/" + myFilename; string myFolderLocation = Application.persistentDataPath + "/../../../../DCIM/Camera/"; string myScreenshotLocation = myFolderLocation + myFilename; if (!System.IO.Directory.Exists(myFolderLocation)) { System.IO.Directory.CreateDirectory(myFolderLocation); } Application.CaptureScreenshot(myFilename); yield return(new WaitForSeconds(1.5f)); print("myDefaultLocation " + myDefaultLocation); print("myScreenshotLocation " + myScreenshotLocation); System.IO.File.Move(myDefaultLocation, myScreenshotLocation); print("hahaha"); AndroidJavaClass classPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject objActivity = classPlayer.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaClass classUri = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject objIntent = new AndroidJavaObject("android.content.Intent", new object[2] { "android.intent.action.MEDIA_SCANNER_SCAN_FILE", classUri.CallStatic <AndroidJavaObject>("parse", "file://" + myScreenshotLocation) }); objActivity.Call("sendBroadcast", objIntent); }
void Init() { #if UNITY_ANDROID && !UNITY_EDITOR Debug.Log("FB: init"); if (contextActivity == null) { using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { contextActivity = actClass.GetStatic <AndroidJavaObject>("currentActivity"); Debug.Log("FB: init"); } using (var pluginClass = new AndroidJavaClass("vn.brine.facebookunity.UnityController")) { if (pluginClass != null) { pluginObject = pluginClass.CallStatic <AndroidJavaObject>("getInstance"); pluginObject.Call("setActivity", contextActivity); Debug.Log("FB: init"); } } } #endif }
IEnumerator SendPostWeChatPay(string _url, WWWForm _wForm) { WWW postData = new WWW(_url, _wForm); yield return(postData); if (postData.error != null) { Debug.Log("Unity 网络请求失败:" + postData.error); } else { Debug.Log("Unity 网络请求成功:" + postData.text); string js = postData.text; int inx = js.IndexOf("\"Data\"") + 7; int end = js.LastIndexOf("}}"); js = js.Substring(inx, end - inx + 1); Debug.Log(js); AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic <AndroidJavaObject> ("currentActivity"); //调用对应方法 jo.Call("reqWXPay", js); } }
/// <summary>Gets the access token currently associated with the Unity activity.</summary> /// <returns>The OAuth 2.0 access token.</returns> public string GetAccessToken() { if (!this.IsAuthenticated()) { Debug.Log("Cannot get API client - not authenticated"); return(null); } string token = null; string email = GetUserEmail() ?? "NULL"; string scope = "oauth2:https://www.googleapis.com/auth/plus.me"; using (AndroidJavaClass unityActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"), googleAuthUtil = new AndroidJavaClass("com.google.android.gms.auth.GoogleAuthUtil")) { using (AndroidJavaObject currentActivity = unityActivity.GetStatic <AndroidJavaObject>("currentActivity")) { token = googleAuthUtil.CallStatic <string>("getToken", currentActivity, email, scope); } } return(token); }
public static void ChengYoufloatWindow(string uid, string oid, string serverid, string serverName, string roleid, string roleName, string mToken) { if (Application.isEditor) { return; } #if UNITY_ANDROID using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject jo = jc.GetStatic <AndroidJavaObject>("currentActivity")) { string [] stringArray = new string[7]; stringArray[0] = uid; stringArray[1] = oid; stringArray[2] = serverid; stringArray[3] = serverName; stringArray[4] = roleid; stringArray[5] = roleName; stringArray[6] = mToken; jo.Call("ChengYoufloatWindow", stringArray); } } #endif }
/* * public IEnumerator CaptureScreen() * { * * yield return new WaitForEndOfFrame(); * * * * string screenshotFilename = "Green_" + System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".JPG"; * string DefaultPath = Application.persistentDataPath; * * Application.CaptureScreenshot (screenshotFilename); * * if (Application.platform == RuntimePlatform.Android) { * * string myFolderLocation = "/sdcard/DCIM/Green/"; * * * if (!System.IO.Directory.Exists(myFolderLocation)) * { * System.IO.Directory.CreateDirectory(myFolderLocation); * } * * Path = myFolderLocation + screenshotFilename; * * } * * * * shot = true; * * * * * ssButton.SetActive (true); * backButton.SetActive (true); * testColor.SetActive (true); * colorButton.SetActive (true); * Slider_T.SetActive (true); * Text_t.SetActive (true); * Slider_S.SetActive (true); * Text_S.SetActive (true); * * * * * * * } * */ void UpdateGallery() { ActiveUrl = movePath; // string action = Intent.ACTION_MEDIA_SCANNER_SCAN_FILE AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); string action = intentClass.GetStatic <string>("ACTION_MEDIA_SCANNER_SCAN_FILE"); // Intent intentObject = new Intent(action); AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent", action); // Uri uriObject = Uri.parse("file:" + filePath); AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uriObject = uriClass.CallStatic <AndroidJavaObject>("parse", "file://" + movePath); // intentObject.setData(uriObject); intentObject.Call <AndroidJavaObject>("setData", uriObject); // this.sendBroadcast(intentObject); AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unity.GetStatic <AndroidJavaObject>("currentActivity"); currentActivity.Call("sendBroadcast", intentObject); }
private void AdaptPhoneScreenSize() { AndroidJavaClass j = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = j.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject displayManager = currentActivity.Call <AndroidJavaObject>("getSystemService", new AndroidJavaObject("java.lang.String", "display")); AndroidJavaObject display = displayManager.Call <AndroidJavaObject>("getDisplay", 0); AndroidJavaObject outSize = new AndroidJavaObject("android.graphics.Point"); display.Call("getRealSize", outSize); float _real_screen_width = outSize.Get <int>("x"); float _real_screen_height = outSize.Get <int>("y"); _touch_area_x_min = -0.93f; _touch_area_x_max = 0.93f; float _real_touch_area_top = _real_screen_height - (Design_Phone_Screen_Height - Design_Touch_Area_Top) * _real_screen_width / Design_Phone_Screen_Width; float _real_touch_area_bottom = _real_screen_height - (Design_Phone_Screen_Height - Design_Touch_Area_Bottom) * _real_screen_width / Design_Phone_Screen_Width; _touch_area_y_min = _real_touch_area_bottom / _real_screen_height; _touch_area_y_max = _real_touch_area_top / _real_screen_height; _touch_area_y_min = -(_touch_area_y_min - 0.5f) * 2f; // value range maps to -1f ~ 1f _touch_area_y_max = -(_touch_area_y_max - 0.5f) * 2f; // value range maps to -1f ~ 1f _touch_area_y_center = (_touch_area_y_min + _touch_area_y_max) / 2f; _screen_adapted = true; }
public void Initialize(string accessToken) { using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { _activityContext = activityClass.GetStatic <AndroidJavaObject>("currentActivity"); } if (null == _activityContext) { Debug.LogError("Could not get current activity"); return; } using (AndroidJavaClass MapboxAndroidTelem = new AndroidJavaClass("com.mapbox.services.android.telemetry.MapboxTelemetry")) { if (null == MapboxAndroidTelem) { Debug.LogError("Could not get class 'MapboxTelemetry'"); return; } _telemInstance = MapboxAndroidTelem.CallStatic <AndroidJavaObject>("getInstance"); if (null == _telemInstance) { Debug.LogError("Could not get MapboxTelemetry instance"); return; } _telemInstance.Call( "initialize" , _activityContext , accessToken , "MapboxEventsUnityAndroid/" + Constants.SDK_VERSION ); } }
public static void FetchOBB() { using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { AndroidJavaObject @static = androidJavaClass.GetStatic <AndroidJavaObject>("currentActivity"); AndroidJavaObject androidJavaObject = new AndroidJavaObject("android.content.Intent", @static, new AndroidJavaClass("com.unity3d.plugin.downloader.UnityDownloaderActivity")); int num = 65536; androidJavaObject.Call <AndroidJavaObject>("addFlags", new object[1] { num }); androidJavaObject.Call <AndroidJavaObject>("putExtra", new object[2] { "unityplayer.Activity", @static.Call <AndroidJavaObject>("getClass", new object[0]).Call <string>("getName", new object[0]) }); @static.Call("startActivity", androidJavaObject); if (AndroidJNI.ExceptionOccurred() != IntPtr.Zero) { Debug.LogError("Exception occurred while attempting to start DownloaderActivity - is the AndroidManifest.xml incorrect?"); AndroidJNI.ExceptionDescribe(); AndroidJNI.ExceptionClear(); } } }
public bool init() { #if UNITY_IPHONE GPG_Init(appID + ".apps.googleusercontent.com"); GPG_SetGameObjectName(name); return(true); #elif UNITY_ANDROID AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); mCurrentActivity = unityPlayer.GetStatic <AndroidJavaObject> ("currentActivity"); Debug.Log("Current activity " + mCurrentActivity); mNerdGPG = new AndroidJavaObject("com.nerdiacs.nerdgpgplugin.NerdGPG"); if (mCurrentActivity != null && mNerdGPG != null) { mNerdGPG.Set <bool>("mDebugLog", true); // enable logging mNerdGPG.SetStatic <string>("gameObjectName", name); mNerdGPG.Call <bool>("init", mCurrentActivity); return(true); } else { return(false); } #endif }
public AndroidAssetStream(string fileName) { var noCompressExt = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg", ".aac", ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", ".amr", ".awb", ".wma", ".wmv" }; var ext = System.IO.Path.GetExtension(fileName); using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using (var activity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity")) { using (var assetManager = activity.Call <AndroidJavaObject>("getAssets")) //android.content.res.AssetManager { if (Array.Exists <string>(noCompressExt, (obj) => { return(obj == ext); })) { using (var assetFileDescriptor = assetManager.Call <AndroidJavaObject>("openFd", fileName)) //assets/ //android.content.res.AssetFileDescriptor { AndroidInputStreamLength = assetFileDescriptor.Call <long>("getLength"); } } AndroidInputStream = assetManager.Call <AndroidJavaObject>("open", fileName); } } } if (AndroidInputStream == null) { throw new System.IO.FileNotFoundException("getAssets failed", fileName); } }
public void GetData() { GUIDisplayer.ShowDebug("Calling GetData()"); Debug.Log("Calling GetData()"); text.text = text.text + "\nCalling GetData()"; #if UNITY_ANDROID using (AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { activityContext = activityClass.GetStatic <AndroidJavaObject>("currentActivity"); } using (pluginClass = new AndroidJavaClass("com.bugdev.asus.app_2.MainActivity")) { if (pluginClass != null) { javaObj = pluginClass.CallStatic <AndroidJavaObject>("instance"); javaObj.Call("setContext", activityContext); string data = javaObj.Call <string>("GetData"); Debug.Log("Data : " + data); GUIDisplayer.ShowDebug("Data : " + data); text.text = text.text + "\nData : " + data; } } #endif }
public void HasChanged() { cont_items_ubicados_correct = 0; cont_items_en_slots = 0; lista_objetos = new int[8];//OJO CADA FASE TIENE UN NUMERO DIFERENTE DE PASOS int contad = 0; Debug.Log ("Se ha notificado de un cambio en CanvasProcessManagerEval organizando pasos"); foreach (Transform slotTransform in slots) { item_slot = slotTransform.GetComponent<SlotsBehaviourMenuStepsPhaseTwo>().slot_con_objeto_correcto; id_paso = slotTransform.GetComponent<SlotsBehaviourMenuStepsPhaseTwo>().id_of_step_in_slot; lista_objetos[contad] = id_paso; contad++; //Debug.Log ("Se ha obtenido el componente SlotsBehaviour en CanvasProcessManagerEval organizando pasos"); if(item_slot){ Debug.Log ("Los pasos estan correctamente ordenados en CanvasProcessManagerEval organizando pasos"); cont_items_ubicados_correct++; } if(slotTransform.childCount > 0){ cont_items_en_slots++; } } Debug.Log ("CanvasProcessPhasesManagEval: Cantidad de items correctamente ubicados: " + cont_items_ubicados_correct); Debug.Log ("Cantidad de items en slots:" + cont_items_en_slots); if (cont_items_ubicados_correct == 8) items_ubicados_correctamente = true; else items_ubicados_correctamente = false; Debug.Log ("CanvasProcessPhasesManagEval: Se va a definir en el manager organizacion correcta de fases = " + items_ubicados_correctamente); if (items_ubicados_correctamente) { if (tickCorrectOrder != null){ tickCorrectOrder.GetComponent<Image>().sprite = img_tick; tickCorrectOrder.enabled = true; } this.NotifyStepsOrganized (true); if(!steps_organized_from_manager){ Debug.Log ("Ingresa al metodo para bloquear los pasos por organizacion automatica del appmanager"); //inactivando los pasos para que el estudiante no pueda acceder a cualquier otro sino al primero //inicialmente: if(imgs_gray_random.Length >= 8){ Debug.Log ("Ingresa a deshabilitar los botones "); Debug.Log ("Numero step_btn_one=" + step_number_btn_one); if(step_number_btn_one != 1) this.btn_one_to_order.interactable = false; img_gray_step = Resources.Load<Sprite>(imgs_gray_random[0]); if(img_gray_step != null) this.btn_one_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_two=" + step_number_btn_two); if(step_number_btn_two != 1){ this.btn_two_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[1]); if(img_gray_step != null) this.btn_two_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_three=" + step_number_btn_three); if(step_number_btn_three != 1){ this.btn_three_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[2]); if(img_gray_step != null) this.btn_three_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_four=" + step_number_btn_four); if(step_number_btn_four != 1){ this.btn_four_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[3]); if(img_gray_step != null) this.btn_four_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_five=" + step_number_btn_five); if(step_number_btn_five != 1){ this.btn_five_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[4]); if(img_gray_step != null) this.btn_five_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_six=" + step_number_btn_six); if(step_number_btn_six != 1){ this.btn_six_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[5]); if(img_gray_step != null) this.btn_six_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_seven=" + step_number_btn_seven); if(step_number_btn_seven != 1){ this.btn_seven_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[6]); if(img_gray_step != null) this.btn_seven_to_order.GetComponent<Image>().sprite = img_gray_step; Debug.Log ("Numero step_btn_eight=" + step_number_btn_eight); if(step_number_btn_eight != 1){ this.btn_eight_to_order.interactable = false; } img_gray_step = Resources.Load<Sprite>(imgs_gray_random[7]); if(img_gray_step != null) this.btn_eight_to_order.GetComponent<Image>().sprite = img_gray_step; } else { Debug.Log ("MenuOfStepsPhaseOneManager: El vector de imagenes en GRIS es NULO"); } }//cierra if interno que valida si se ha pedido organizar los pasos desde el app-manager } else { if (tickCorrectOrder != null) tickCorrectOrder.enabled = false; if(cont_items_en_slots == 8){ tickCorrectOrder.GetComponent<Image>().sprite = img_warning; tickCorrectOrder.enabled = true; } this.NotifyStepsOrganized (false); } Debug.Log ("MenuOfStepsPhaseTwoEval: Los items estan correctamente ubicados? = " + items_ubicados_correctamente); //se va a obtener la secuencia del orden de pasos secuencia_pasos = ""; if (lista_objetos.Length >= 8 && cont_items_en_slots >= 8) { //recorriendo la secuencia de pasos como esta organizados actualmente: Debug.Log ("La capacidad de la lista es: " + lista_objetos.Length ); for (int i=0; i<lista_objetos.Length; i++) { Debug.Log ("Secuencia de pasos en i= "+i+"= " + lista_objetos [i]); elemento_secuencia = lista_objetos [i].ToString(); if (i == 0) secuencia_pasos = secuencia_pasos + elemento_secuencia; else secuencia_pasos = secuencia_pasos + "-" + elemento_secuencia; } //intentando guardar en la BD: Debug.Log ("Se va a solicitar guardar la secuencia en la BD:"); var and_unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var current_act = and_unity.GetStatic<AndroidJavaObject>("currentActivity"); Debug.Log("Se ha obtenido current activity..."); // Accessing the class to call a static method on it var save_todb_activity = new AndroidJavaClass("edu.udg.bcds.pintura.arapp.SaveDatabaseData"); Debug.Log ("Se ha obtenido StartActivity..."); Debug.Log ("Se va a intentar obtener la fecha..."); string fecha = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Debug.Log ("La fecha obtenida es: " + fecha); object[] parameters = new object[3]; parameters [0] = current_act; //pasando el argumento de la actividad actual que se debe reproducir parameters [1] = fecha; //pasando el argumento de la fecha y hora actual parameters [2] = secuencia_pasos; //enviando // Se llama al metodo estatico de android que almacena la secuencia en la base de datos: save_todb_activity.CallStatic("SaveStepsPhaseTwoSeqToDB", parameters); } else { Debug.Log ("La lista de elementos para la secuencia aun NO ESTA COMPLETA items_en_slots =" + cont_items_en_slots ); } }