實現了華爲、vivo、opp。三星和小米暫時沒有找到。java
package unity.daimou.SDK; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.ActionBar.LayoutParams; import android.content.Context; import android.util.Log; import android.view.Window; import android.view.WindowManager; //全面屏處理工具類 public class NotchSizeUtil { public static boolean hasNotchInScreen(Context context) { if (hasNotchInHuaWei(context)) { return true; } else if (hasNotchInOpp(context)) { return true; } else if (hasNotchInScreenAtVoio(context)) { return true; } else { return false; } } public static boolean hasNotchInHuaWei(Context context) { boolean ret = false; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl .loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen"); ret = (Boolean) get.invoke(HwNotchSizeUtil); } catch (ClassNotFoundException e) { Log.e("test", "hasNotchInScreen ClassNotFoundException"); } catch (NoSuchMethodException e) { Log.e("test", "hasNotchInScreen NoSuchMethodException"); } catch (Exception e) { Log.e("test", "hasNotchInScreen Exception"); } finally { return ret; } } public static boolean hasNotchInOpp(Context context) { boolean ret = false; try { ret = (Boolean) context.getPackageManager().hasSystemFeature( "com.oppo.feature.screen.heteromorphism"); } catch (Exception e) { Log.e("test", "hasNotchInScreen Exception"); } finally { return ret; } } public static final int NOTCH_IN_SCREEN_VOIO = 0x00000020;// 是否有凹槽 public static final int ROUNDED_IN_SCREEN_VOIO = 0x00000008;// 是否有圓角 public static boolean hasNotchInScreenAtVoio(Context context) { boolean ret = false; try { ClassLoader cl = context.getClassLoader(); Class FtFeature = cl.loadClass("com.util.FtFeature"); Method get = FtFeature.getMethod("isFeatureSupport", int.class); ret = (boolean) get.invoke(FtFeature, NOTCH_IN_SCREEN_VOIO); } catch (ClassNotFoundException e) { Log.e("test", "hasNotchInScreen ClassNotFoundException"); } catch (NoSuchMethodException e) { Log.e("test", "hasNotchInScreen NoSuchMethodException"); } catch (Exception e) { Log.e("test", "hasNotchInScreen Exception"); } finally { return ret; } } }