1. 主要总结主流品牌小米、华为、oppovivo的刘海屏判断。在某些特殊页面需要适配刘海屏时,可以用以下方法判断。
    或者判断屏幕比例是否大于2
  2.  
  3. /**
    * 小米刘海屏判断.
    */
  1. public static int getInt(String key,Activity activity) {
  2. int result = 0;
  3. if (isXiaomi()){
  4. try {
  5. ClassLoader classLoader = activity.getClassLoader();
  6. @SuppressWarnings("rawtypes")
  7. Class SystemProperties = classLoader.loadClass("android.os.SystemProperties");
  8. //参数类型
  9. @SuppressWarnings("rawtypes")
  10. Class[] paramTypes = new Class[2];
  11. paramTypes[0] = String.class;
  12. paramTypes[1] = int.class;
  13. Method getInt = SystemProperties.getMethod("getInt", paramTypes);
  14. //参数
  15. Object[] params = new Object[2];
  16. params[0] = new String(key);
  17. params[1] = new Integer(0);
  18. result = (Integer) getInt.invoke(SystemProperties, params);
  19.  
  20. } catch (ClassNotFoundException e) {
  21. e.printStackTrace();
  22. } catch (NoSuchMethodException e) {
  23. e.printStackTrace();
  24. } catch (IllegalAccessException e) {
  25. e.printStackTrace();
  26. } catch (IllegalArgumentException e) {
  27. e.printStackTrace();
  28. } catch (InvocationTargetException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. return result;
  33. }
  1. // 是否是小米手机
  2. public static boolean isXiaomi() {
  3. return "Xiaomi".equals(Build.MANUFACTURER);
  4. }
  1. /**
    * 华为刘海屏判断
    */
  1. public static boolean hasNotchAtHuawei(Context context) {
  2. boolean ret = false;
  3. try {
  4. ClassLoader cl = context.getClassLoader();
  5. Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
  6. Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen");
  7. ret = (boolean) get.invoke(HwNotchSizeUtil);
  8. } catch (ClassNotFoundException e) {
  9. LogUtil.e("Huawei", "hasNotchInScreen ClassNotFoundException");
  10. } catch (NoSuchMethodException e) {
  11. LogUtil.e("Huawei", "hasNotchInScreen NoSuchMethodException");
  12. } catch (Exception e) {
  13. LogUtil.e("Huawei", "hasNotchInScreen Exception");
  14. } finally {
  15. return ret;
  16. }
  17. }
  1. /**
    * VIVO刘海屏判断
    */
  1. public static final int VIVO_NOTCH = 0x00000020;//是否有刘海
  2. public static final int VIVO_FILLET = 0x00000008;//是否有圆角
  3.  
  4. public static boolean hasNotchAtVivo(Context context) {
  5. boolean ret = false;
  6. try {
  7. ClassLoader classLoader = context.getClassLoader();
  8. Class FtFeature = classLoader.loadClass("android.util.FtFeature");
  9. Method method = FtFeature.getMethod("isFeatureSupport", int.class);
  10. ret = (boolean) method.invoke(FtFeature, VIVO_NOTCH);
  11. } catch (ClassNotFoundException e) {
  12. LogUtil.e( "Vivo","hasNotchAtVivo ClassNotFoundException");
  13. } catch (NoSuchMethodException e) {
  14. LogUtil.e( "Vivo","hasNotchAtVivo NoSuchMethodException");
  15. } catch (Exception e) {
  16. LogUtil.e( "Vivo","hasNotchAtVivo Exception");
  17. } finally {
  18. return ret;
  19. }
  20. }
  1. /**
    * OPPO刘海屏判断
    */
  1. public static boolean hasNotchAtOPPO(Context context) {
  2. return context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");
  3. }

By LiYing

  1.  

Android判断是否为刘海屏的更多相关文章

  1. 一大波 Android 刘海屏来袭,全网最全适配技巧!

    一.序 Hi,大家好,我是承香墨影! Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议.不过不管你怎样,Android 也要跻入 &q ...

  2. Android手机刘海屏(附工具类)

    工具类 根据VIVO.OPPO.华为官方文档,这里整理了一个刘海屏工具类,判断设备是否为刘海屏,其他厂商公布相关方法后也会在此更新. OPPO: /** * OPPO * * @param conte ...

  3. Unity与Android刘海屏适配

    本周学习Unity与Android刘海屏适配 关于刘海屏适配部分 网上有很多教程 这里只是做一下整理 https://blog.csdn.net/xj1009420846/article/detail ...

  4. JQuery 判断IPad、IPhone、Android是横屏还是竖屏(Window.Orientation实现)

    在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法. 代码如下: function ...

  5. 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码

    在ipad.iphone网页开发中,我们很可能需要判断是横屏或者竖屏.下面就来介绍如何用 jQuery 判断iPad.iPhone.Android是横屏还是竖屏的方法 其实主要是通过window.or ...

  6. Android刘海屏适配 ----- ImmersionBar

    android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换.刘海屏.软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity.Fr ...

  7. iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等

    保证能判断,呕心沥血,不行切JIJI 方法一 Objective-C // iPhoneX.iPhoneXR.iPhoneXs.iPhoneXs Max等 // 判断刘海屏,返回YES表示是刘海屏 - ...

  8. Android判断屏幕锁屏的方法总结

    由于做一个项目,需要判断屏幕是否锁屏,发现网上方法很多,但是比较杂,现在进行总结一下: 总共有两类方法: 一.代码直接判定 二.接收广播 现在先说第一类方法(代码直接判定): 1.通过PowerMan ...

  9. Android框架浅析之锁屏(Keyguard)机制原理

    最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...

随机推荐

  1. BFS:Nightmare(可返回路径)

    解题心得: 1.point:关于可以返回路径的BFS的标记方法,并非是简单的0-1,而是可以用时间比较之后判断是否push. 2.queue创建的地点(初始化问题),在全局中创建queue在一次调用B ...

  2. 一个漂亮的PHP验证码

    自己导入字体,可以按照自己的额需要随便修改. <?php class Imagecode{ private $width ; private $height; private $counts; ...

  3. IOS开发---菜鸟学习之路--(二十)-二维码扫描功能的实现

    本章将讲解如何实现二维码扫描的功能 首先在github上下载ZBar SDK地址https://github.com/bmorton/ZBarSDK 然后将如下的相关类库添加进去 AVFoundati ...

  4. 引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符

    今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error. >e:\c++\button_fly2\b ...

  5. mini购物车程序

    product_list=[("Iphohe",5800),("Mac Pro Book",12900), ("xiaomi 4c",120 ...

  6. git+jenkins持续集成三-定时构建语法

    构建位置:选择或创建工程_设置_构建触发器 1. 定时构建语法:* * * * * (五颗星,多个时间点,中间用逗号隔开)第一个*表示分钟,取值0~59第二个*表示小时,取值0~23第三个*表示一个月 ...

  7. 07 JVM 是如何实现反射的

    Java 中的反射 反射是 Java 语言的一个相当重要的特性,它允许正在运行的 Java 程序观测,甚至是修改程序的动态行为. 我们可以通过 Class 对象枚举该类中的所有方法,还可以通过 Met ...

  8. 最少的硬币数量组合出1到m之间的任意面值(贪心算法)

    题目描述: 你有n种不同面值的硬币,每种面值的硬币都有无限多个,为了方便购物,你希望带尽量少的硬币,并且要能组合出 1 到 m 之间(包含1和m)的所有面值. 输入描述: 第一行包含两个整数:m ,n ...

  9. imx6移植librtmp

    一.openssl交叉编译 1.下载 https://www.openssl.org/source/ 版本不要太高,刚开始版本高了,有些函数取消了,链接不上 使用1.0.1f即可 2.编译成共享库 . ...

  10. java作业8

    interface Pet{ public String getName(); public String getColor(); public int getAge(); } class Cat i ...