Android刘海屏适配判断:

import android.app.Activity;import android.os.Build;import android.text.TextUtils;import android.view.DisplayCutout;import java.lang.reflect.Method;/** * * @brief: Notch Tools */public class NotchUtils {    /**     * 是否有刘海屏     *     * @return     */    public static boolean hasNotchInScreen(Activity activity) {        try {            // 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 , meizu                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 if (manufacturer.equalsIgnoreCase("meizu")) {                    return hasNotchMeizu(activity);                } else {                    return false;                }            }        } catch (Exception e) {            LogUtils.print(e.getMessage());            return false;        }        return false;    }    /**     * 判断vivo是否有刘海屏     * https://swsdl.vivo.com.cn/appstore/developer/uploadfile/20180328/20180328152252602.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     */    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 (int) (get.invoke(c, "ro.miui.notch", 0)) == 1;        } catch (Exception e) {            e.printStackTrace();            return false;        }    }    /**     * 判断华为是否有刘海屏     * https://devcenter-test.huawei.com/consumer/cn/devservice/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;        }    }    /**     * 判断魅族是否有刘海屏     *     *     * @param activity     * @return     */    private static boolean hasNotchMeizu(Activity activity) {        try {            Class clazz = Class.forName("flyme.config.FlymeFeature");            Field field = clazz.getDeclaredField("IS_FRINGE_DEVICE");            return (boolean) field.get(null);        } catch (Exception e) {            return false;        }    }}

iPhone刘海屏适配判断:

(BOOL)hasNotch {    BOOL bHasNotch = NO;    //判断是否是手机    if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {        return bHasNotch;    }    //手机判断    if (@available(iOS 11.0, *)) {        UIWindow *mainWindow = [[[UIApplication sharedApplication] delegate] window];        if (mainWindow.safeAreaInsets.bottom > 0.0) {            bHasNotch = YES;        }    }    return bHasNotch;}

更多相关文章

  1. android获取应用名称,判断应用是否安装
  2. Android(安卓)获取SD卡路径和判断SD卡是否存在
  3. No 122 · android获取本机号码和本机唯一标识
  4. 判断Android的WIFI与GPS状态,并引导用户前去开启GPS与WIFI设置
  5. Android上的Adobe AIR应用程序运行环境发布了!
  6. Android撬动IT市场的新支点
  7. android通过USB使用真机调试程序
  8. 最封闭的开源系统:话说 Android(安卓)的八宗罪
  9. Android优缺点

随机推荐

  1. Android Q Beta 发布
  2. RxAndroid和RxJava的资料分享
  3. Android(安卓)左侧滑动窗口打开关闭监测
  4. Android集成支付宝
  5. Android中的sp和dp的区别
  6. Android Studio 快速入门详解
  7. Android中Fragment与Activity之间的交互(
  8. Android常见问题总结(四)
  9. android效率为什么这么的高呢
  10. Android Treble 结构:Part 1 - 介绍