Egret社区

刘海适配问题

2019-5-18 17:12
206011
1银子
现在有些安卓的手机也有刘海屏。。我们h5 可以根据什么方法获取他们手机是否是刘海屏的。。。然后我这边自己做处理。有懂的请把方法或者连接回复下。。谢谢了

最佳答案

查看完整内容

高宽比大于2就统一当刘海屏处理吧
分享到 :
0 人收藏

11 个回复

倒序浏览
3315213587  初学乍练 | 2019-5-18 17:12:27
高宽比大于2就统一当刘海屏处理吧
csy  登堂入室 | 2019-5-20 09:48:39
有谁知道判断方法的吗。。还是暂时没有安卓刘海判断的方法
CYL360  登堂入室 | 2019-5-23 11:46:10
csy 发表于 2019-5-20 09:48
有谁知道判断方法的吗。。还是暂时没有安卓刘海判断的方法

网上有代码各个型号有判断
CYL360  登堂入室 | 2019-5-23 11:48:13
csy 发表于 2019-5-20 09:48
有谁知道判断方法的吗。。还是暂时没有安卓刘海判断的方法

我现在做的是android下就用各个型号自己的判断 ios用的是宽高比大于2 就是有
a22aaass  登堂入室 | 2019-5-24 10:14:06
CYL360 发表于 2019-5-23 11:48
我现在做的是android下就用各个型号自己的判断 ios用的是宽高比大于2 就是有 ...

可以分享一下代码吗?安卓和ios的处理方式
CYL360  登堂入室 | 2019-5-24 16:40:16
a22aaass 发表于 2019-5-24 10:14
可以分享一下代码吗?安卓和ios的处理方式

    /**
     * 是否有刘海屏
     *
     * @return
     */
    @SuppressLint("NewApi")
        public static boolean hasNotchInScreen(Activity activity) {
        // android  P 以上有标准 API 来判断是否有刘海屏
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            DisplayCutout displayCutout = activity.getWindow().getDecorView().getRootWindowInsets().getDisplayCutout();
            if (displayCutout != null) {
                // 说明有刘海屏
                return true;
            }
        } else {
            // 通过其他方式判断是否有刘海屏  目前官方提供有开发文档的就 小米,vivo,华为(荣耀),oppo
            String manufacturer = Build.MANUFACTURER;

            if (TextUtils.isEmpty(manufacturer)) {
                return false;
            } else if (manufacturer.equalsIgnoreCase("HUAWEI")) {
                return hasNotchHw(activity);
            } else if (manufacturer.equalsIgnoreCase("xiaomi")) {
                return hasNotchXiaoMi(activity);
            } else if (manufacturer.equalsIgnoreCase("oppo")) {
                return hasNotchOPPO(activity);
            } else if (manufacturer.equalsIgnoreCase("vivo")) {
                return hasNotchVIVO(activity);
            } else {
                return false;
            }
        }
        return false;
    }

    /**
     * 判断vivo是否有刘海屏
     * https://swsdl.vivo.com.cn/appsto ... 180328152252602.pdf
     *
     * @param activity
     * @return
     */
    private static boolean hasNotchVIVO(Activity activity) {
        try {
            Class<?> c = Class.forName("android.util.FtFeature");
            Method get = c.getMethod("isFeatureSupport", int.class);
            return (Boolean) (get.invoke(c, 0x20));
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 判断oppo是否有刘海屏
     * https://open.oppomobile.com/wiki/doc#id=10159
     *
     * @param activity
     * @return
     */
    @SuppressLint("NewApi")
        private static boolean hasNotchOPPO(Activity activity) {
        return activity.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");
    }

    /**
     * 判断xiaomi是否有刘海屏
     * https://dev.mi.com/console/doc/detail?pId=1293
     *
     * @param activity
     * @return
     */
    private static boolean hasNotchXiaoMi(Activity activity) {
        try {
            Class<?> c = Class.forName("android.os.SystemProperties");
            Method get = c.getMethod("getInt", String.class, int.class);
            return (Integer) (get.invoke(c, "ro.miui.notch", 1)) == 1;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 判断华为是否有刘海屏
     * https://devcenter-test.huawei.co ... evservice/doc/50114
     *
     * @param activity
     * @return
     */
    private static boolean hasNotchHw(Activity activity) {

        try {
            ClassLoader cl = activity.getClassLoader();
            Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
            Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen");
            return (Boolean) get.invoke(HwNotchSizeUtil);
        } catch (Exception e) {
            return false;
        }
    }
a18050123231  圆转纯熟 | 2019-5-24 16:57:22
CYL360 发表于 2019-5-24 16:40
/**
     * 是否有刘海屏
     *

老哥你这要怎么用啊,在微信环境下?我复制到wing里面各种报错,都不知道从何入手,是不是涉及到的其他工具类没一起发
CYL360  登堂入室 | 2019-5-24 17:00:34
a18050123231 发表于 2019-5-24 16:57
老哥你这要怎么用啊,在微信环境下?我复制到wing里面各种报错,都不知道从何入手,是不是涉及到的其他工 ...

这个不是微信用的android 用的
CYL360  登堂入室 | 2019-5-24 17:01:54
a18050123231 发表于 2019-5-24 16:57
老哥你这要怎么用啊,在微信环境下?我复制到wing里面各种报错,都不知道从何入手,是不是涉及到的其他工 ...

这个是java代码 activity 里用的 js取这个值 在游戏里做相应的适配就行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部