//获得右侧不安全区像素大小 public static int GetSafeInsetRightOfLandscapeLeft(int def) { AndroidJavaObject activityJO = AndroidPlatform.CurActivity;//new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); EnumSafeInsetArg eArg = EnumSafeInsetArg.eRight; int ret = def; if (GetSafeInsetAndroidP(activityJO, ref ret, eArg)) { return(ret); } if (HasNotchScreenOPPO(activityJO)) { if (GetSafeInsetOPPO(activityJO, ref ret, eArg)) { return(ret); } } if (HasNotchScreenVIVO(activityJO)) { if (GetSafeInsetVIVO(activityJO, ref ret, eArg)) { return(ret); } } if (HasNotchScreenHuaWei(activityJO)) { if (GetSafeInsetHuawei(activityJO, ref ret, eArg)) { return(ret); } } if (HasNotchScreenXiaoMi(activityJO)) { if (GetSafeInsetXiaomi(activityJO, ref ret, eArg)) { return(ret); } } return(ret); }
//vivo protected static bool GetSafeInsetVIVO(AndroidJavaObject activityJO, ref int outValue, EnumSafeInsetArg eArg) { try { bool ret = GetSafeInsetByDimen(activityJO, ref outValue); if (!ret) { outValue = dip2px(activityJO, 27); } //Main.errorString += string.Format("GetSafeInsetVIVO notch height={0}\n",outValue); return(true); } catch (System.Exception e) { //Main.errorString += string.Format("GetSafeInsetVIVO failed!! Exception={0}\n",e); BaseLogSystem.internal_Info("GetSafeInsetVIVO failed!!!! Exception={0}", e); } return(false); }
//huawei获取刘海尺寸:width、height int[0]值为刘海宽度 int[1]值为刘海高度。 protected static bool GetSafeInsetHuawei(AndroidJavaObject activityJO, ref int outValue, EnumSafeInsetArg eArg) { try { AndroidJavaClass jo = new AndroidJavaClass("com.huawei.android.util.HwNotchSizeUtil"); int[] info = jo.CallStatic <int[]>("getNotchSize"); outValue = info[1]; //Main.errorString += string.Format("GetSafeInsetHuawei notch height={0}",outValue); BaseLogSystem.internal_Info("GetSafeInsetHuawei notch height={0}", outValue); return(true); } catch (System.Exception e) { //Main.errorString += string.Format("GetSafeInsetHuawei failed!! Exception={0}\n",e); BaseLogSystem.internal_Info("GetSafeInsetHuawei failed!!!! Exception={0}", e); } return(false); }
//xiaomi protected static bool GetSafeInsetXiaomi(AndroidJavaObject activityJO, ref int outValue, EnumSafeInsetArg eArg) { //https://www.jianshu.com/p/7a934313637e try { //AndroidJavaObject resourceJO = activityJO.Call<AndroidJavaObject>("getResources"); //int rsID = resourceJO.Call<int>("getIdentifier","notch_height", "dimen", "android"); //if (rsID > 0) //{ // outValue = resourceJO.Call<int>("getDimensionPixelSize",rsID); // //Main.errorString += string.Format("GetSafeInsetXiaomi notch height={0}\n",outValue); // BaseLogSystem.internal_Info("GetSafeInsetXiaomi notch height={0}",outValue); // return true; //} bool ret = GetSafeInsetByDimen(activityJO, ref outValue); //Main.errorString += string.Format("GetSafeInsetXiaomi notch height={0}\n",outValue); BaseLogSystem.internal_Info("GetSafeInsetXiaomi notch height={0}", outValue); return(ret); } catch (System.Exception e) { //Main.errorString += string.Format("GetSafeInsetXiaomi failed!! Exception={0}\n",e); BaseLogSystem.internal_Info("GetSafeInsetXiaomi failed!!!! Exception={0}", e); } return(false); }
//android p protected static bool GetSafeInsetAndroidP(AndroidJavaObject activityJO, ref int outValue, EnumSafeInsetArg eArg) { try { int SDK_INT = SystemPropertiesGetInt("ro.build.version.sdk", activityJO, -1); if (SDK_INT >= 28) { int left = (int)Screen.safeArea.x;//对称,两边用一样的值 BaseLogSystem.internal_Info("GetSafeInsetAndroidP Screen.safeArea.x={0}", Screen.safeArea.x); AndroidJavaObject windowsJO = activityJO.Call <AndroidJavaObject>("getWindow"); AndroidJavaObject decorViewJO = windowsJO.Call <AndroidJavaObject>("getDecorView"); AndroidJavaObject windowInsetsJO = decorViewJO.Call <AndroidJavaObject>("getRootWindowInsets"); if (windowInsetsJO == null) { BaseLogSystem.internal_Info("GetSafeInsetAndroidP false"); return(false); } //AndroidJavaObject displayCutout = windowInsetsJO.Call<AndroidJavaObject>("getDisplayCutout"); //left = displayCutout.Call<int>("SafeInsetLeft"); left = AndroidPlatform.MainActivityClass.CallStatic <int>("GetAndroidPSafeInsetTop"); BaseLogSystem.internal_Info("GetSafeInsetAndroidP GetAndroidPSafeInsetTop()={0}", left); if (Screen.orientation == ScreenOrientation.LandscapeRight) { left = AndroidPlatform.MainActivityClass.CallStatic <int>("GetAndroidPSafeInsetRight"); BaseLogSystem.internal_Info("GetSafeInsetAndroidP GetAndroidPSafeInsetRight()={0}", left); } else { left = AndroidPlatform.MainActivityClass.CallStatic <int>("GetAndroidPSafeInsetLeft"); BaseLogSystem.internal_Info("GetSafeInsetAndroidP GetAndroidPSafeInsetLeft()={0}", left); } BaseLogSystem.internal_Info("GetSafeInsetAndroidP GetAndroidPSafeInsetLeft()={0}", left); outValue = left; return(true); } } catch (System.Exception e) { //Main.errorString += string.Format("GetSafeInsetAndroidP failed!! Exception={0}\n",e); BaseLogSystem.internal_Info("GetSafeInsetAndroidP failed!!!! Exception={0}", e); } return(false); }