Android 判断当前设备是手机还是平板的最有效的方法【2022版】

这篇具有很好参考价值的文章主要介绍了Android 判断当前设备是手机还是平板的最有效的方法【2022版】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

之前已经写过一篇文章介绍了,详见《Android 判断当前设备是手机还是平板的最有效的方法》

但是经过一段的时间的使用,发现在一些学习机上会出现误判。学习机明明是10英寸的,但是代码算出来的结果却是5英寸。我猜应该是学习机的硬件信息有误造成的。竟然会误判,那该怎么办呢?

2. 解决方案

还记得我之前提过的吗?如果你百度一下,如何判断当前设备是手机还是平板,搜索到的结果一般都是下面这个。

/**
 * 是否是平板
 *
 * @param context 上下文
 * @return 是平板则返回true,反之返回false
 */
public static boolean isPad(Context context) {
    return (context.getResources().getConfiguration().screenLayout
        & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}

对这个方法,之前我是这样说的:

在大多数情况下,这个方法是有用的。但是经过一段时间的使用,我发现这个方法是会出现误判的。例如:在华为平板上,可以通过调整系统设置中“字体和显示大小”,放大界面,这个时候这个方法的获取结果就是false,将平板误识别为手机。

虽然这个方法也是会误判的,但是很幸运的是,这个方法在学习机上的判断是准确的。竟然如此,那么我就可以将之前的方案进行优化。

之前的方案是这样子的:先获取到当前设备屏幕的宽度和长度(单位是像素),然后通过勾股定理,计算出设备的对角线长度,即屏幕大小(单位是英寸)。而目前市面上,最小的平板是7.0英寸,那么只要判断是屏幕大小大于等于7.0英寸的设备就是平板了,具体代码如下:

/**
 * 是否是平板
 *
 * @param context 上下文
 * @return 是平板则返回true,反之返回false
 */
public static boolean isPad(Context context) {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics dm = new DisplayMetrics();
    display.getMetrics(dm);
    double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
    double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
    double screenInches = Math.sqrt(x + y); // 屏幕尺寸
    return screenInches >= 7.0;
}

将上面两个方案进行结合,得出下面代码:文章来源地址https://www.toymoban.com/news/detail-549426.html

/**
 * 是否是平板
 *
 * @param context 上下文
 * @return 是平板则返回true,反之返回false
 */
public static boolean isPad(Context context) {
    boolean isPad = (context.getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE;

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    DisplayMetrics dm = new DisplayMetrics();
    display.getMetrics(dm);
    double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
    double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
    double screenInches = Math.sqrt(x + y); // 屏幕尺寸
    return isPad || screenInches >= 7.0;
}

到了这里,关于Android 判断当前设备是手机还是平板的最有效的方法【2022版】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序获取是android还是ios,微信小程序-手机操作系统以及微信版本判断

    首先,要判断当前用户的微信版本以及是安卓还是iOS,要调用方法wx.getSystemInfo() 官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/system/system-info/wx.getSystemInfo.html 在获取成功的success方法中,res中包含相关信息,接下来就是做判断: 微信版本判断非常重要,涉及到版本兼容性.更关乎整

    2024年02月15日
    浏览(38)
  • 如何判断电脑当前连接的网络是WiFi无线网络还是有线网络?

    1. wifi无线网络 wifi无线网络: 一般情况下电脑右下角如 图1 所示,则代表当前连接的网络是 wifi无线网络 。 图1: wifi无线网络 如果是平时家里用的,则只能查看或者登录公司以外的网站 或者 软件。如果想登录公司的网站 或 公司的软件,则必须连接上公司的内网。 【连接公

    2024年02月16日
    浏览(37)
  • uni-app:实现当前时间的获取,并且根据当前时间判断所在时间段为早上,下午还是晚上

    获取当前时间 toString() 方法将数字转换为字符串 padStart(2, \\\'0\\\') : padStart() 方法用于在字符串头部填充指定的字符,使其达到指定的长度。该方法接受两个参数:第一个参数为期望得到的字符串长度,第二个参数为要填充的字符。 时间段的判断 根据小时来判断当前的时间段,

    2024年02月08日
    浏览(47)
  • unity 判断当前设备是否是模拟器(安卓)

    最近有个需求,需要判断当前设备是否是模拟器,网上查了一下,发现基本上都是使用特征字符串进行检索,类似这种: 发现都是不行的,因为现在的模拟器都会伪装== 还有一种方法是使用 AndroidJavaClass 来调用安卓相关的方法:参考林新发大佬 例如这种: ps:由于没用安卓

    2024年02月14日
    浏览(39)
  • php判断是ios手机还是安卓手机

    可以使用PHP中的 $_SERVER[\\\'HTTP_USER_AGENT\\\'] 全局变量来判断用户的设备类型。根据不同的设备类型,可以判断是iOS手机还是安卓手机。 下面是一个示例代码: 请注意, $_SERVER[\\\'HTTP_USER_AGENT\\\'] 并不是可靠的方式 ,因为用户代理字符串可以被伪造。因此,在实际应用中,建议使用更可

    2024年02月16日
    浏览(41)
  • 智能工厂MES系统,终端设备支持手机、PDA、工业平板、PC

    源计划智能工厂MES系统(开源版) 功能包括销售管理,仓库管理,生产管理,质量管理,设备管理,条码追溯,财务管理,系统集成,移动端APP。 使用GPL-3.0开源协议 前端采用Vue、Element UI。 后端采用Spring Boot、Spring Security、Redis Jwt。 权限认证使用Jwt,支持多终端认证系统。 高

    2024年02月07日
    浏览(48)
  • 通过RD Client远程连接windows电脑(平板,手机等设备远程连接电脑)

    目录 前言 关于技术 1、RD Client 2、内网穿透 3、反向代理 操作步骤 1、服务端配置 2、客户端配置  3、用RD Client连接客户端 这篇文章是有关于使用RD Client进行远程连接windows电脑的教程,但其实很多内容都适用于此环境的扩展情况,如连接一台没有公网IP的设备,对其进行SSH远

    2024年02月03日
    浏览(36)
  • Android 适配手机和平板

    一、屏幕适配限定符 Android 系统加载应用资源时 , 会根据当前运行应用的设备的相关属性 , 如 : 屏幕尺寸 / 屏幕像素密度 / 宽高比 / 屏幕方向 等属性 , 加载不同的屏幕适配限定符目录下的资源 ; 如 : 横竖屏切换时 , res/layout-land 目录中 , 存放的是横屏布局 , res/layout-port 目录中

    2024年02月05日
    浏览(47)
  • android手机平板拓展电脑屏幕

    有这么两个软件 spacedesk_driver_Win_10_64_v1065_BETA.msi 安装在电脑上 spacedeskv0.91.1_chinese.apk  安装在android设备上 同一个局域网投屏就好了。 局域网无限投屏是很吃带宽的。 建议usb共享网络,不占用带宽、延迟低。 下载地址: https://download.csdn.net/download/qq_43319748/88519504

    2024年02月02日
    浏览(32)
  • uniapp开发小程序-如何判断小程序是在手机端还是pc端打开

    官方说明 https://developers.weixin.qq.com/miniprogram/dev/devtools/pc-dev.html 小程序如何判断是 PC 平台? 通过 getSystemInfo 官方接口(platform 是 windows) 通过 UA(PC UA 包含 MiniProgramEnv/Windows) App.vue 判断是否是pc端的函数(如果宽度足够也视为pc端) 同时值得注意的是,微信开发者工具的

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包