根据VIVO、OPPO、华为官方文档,这里整理了一个刘海屏工具类,判断设备是否为刘海屏,其余厂商公布相关方法后也会在此更新。android
OPPO:工具
/** * OPPO * * @param context Context * @return hasNotch */ public static boolean hasNotchInOppo(Context context) { return context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism"); }
VIVO:测试
/** * VIVO * <p> * android.util.FtFeature * public static boolean isFeatureSupport(int mask); * <p> * 参数: * 0x00000020表示是否有凹槽; * 0x00000008表示是否有圆角。 * * @param context Context * @return hasNotch */ public static boolean hasNotchInVivo(Context context) { boolean hasNotch = false; try { ClassLoader cl = context.getClassLoader(); Class FtFeature = cl.loadClass("android.util.FtFeature"); Method get = FtFeature.getMethod("isFeatureSupport"); hasNotch = (boolean) get.invoke(FtFeature, new Object[]{0x00000020}); } catch (Exception e) { e.printStackTrace(); } return hasNotch; }
华为:ui
/** * HUAWEI * com.huawei.android.util.HwNotchSizeUtil * public static boolean hasNotchInScreen() * * @param context Context * @return hasNotch */ public static boolean hasNotchInHuawei(Context context) { boolean hasNotch = false; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen"); hasNotch = (boolean) get.invoke(HwNotchSizeUtil); } catch (Exception e) { e.printStackTrace(); } return hasNotch; }
除了OPPO的判断简单点外,其余两家厂商都是用反射来获取刘海屏幕信息的。除了VIVO外,另外两家设备都测试过了,有相关设备的开发者能够自行测试一下,欢迎评论私信反馈。spa
最后,不得不感叹苹果的号召力。跟风也好,抄袭也罢,最为开发者,吐槽以后,仍是得作好应用适配。.net
---小米的方案:code
1.如何判断设备为 Notch 机型blog
系统增长了 property ro.miui.notch,值为1时则是 Notch 屏手机。开发
SystemProperties.getInt("ro.miui.notch", 0) == 1;
https://blog.csdn.net/djy1992/article/details/80688376文档
https://blog.csdn.net/DJY1992/article/details/80689632
转载: https://juejin.im/entry/5acf72555188255c9323ad6d