平台:RK3399,RK3588
Android版本:Android Q ,Android S

概述

在平板设备开发过程中,进行三方应用适配时发现:bilibiliHD版本,腾讯视频,优酷等视频应用无法正常将我们的设备识别为tablet设备,导致显示布局和正常的平板设备显示不一致,使用效果不够好

分析

通过查询可知,一般判断是否为平板有以下两种方法:

一、Google判断是否为平板的方法

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

在设备上使用该方法,结果返回为true,表明判断我们设备为平板

二、根据尺寸判断

public static boolean isPad(Context context) {boolean result = false;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.xdpi, 2);// 屏幕尺寸double screenInches = Math.sqrt(x + y);Log.d(TAG, "isPad: "+screenInches);// 大于7尺寸则为Padif (screenInches >= 7.0) {result = true;}Log.d(TAG, "isPad:" + result);return result;}

该方法计算出screenInches为6.77,条件不满足 所以这些三方应用判断设备是否为平板 应该是根据尺寸来判断的

解决方案

根据以上计算方法,计算参数有dm.widthPixels dm.heightPixels dm.xdpi dm.xdpi 对于设备来说,我们设备分辨率是1920X1080的这个无法更改,所以只能更改dm.xdpi dm.xdpi 。
我们设备默认密度为ro.sf.lcd_density =240,但实际dumpsys dispaly 发现设备密度为240 但是xdpi,ydpi 为320 这个是不正确的,所以我们需要更改这个dpi的值和密度保持一致。
查询代码可知,xpdi ydpi 是根据getDefaultDensity 这个方法来设定的,到hardware下查询该方法

//3588中有两个地方
//path:rockchip/hwcomposer/einkhwc/hwcomposer.cpp
//       rockchip/hwcomposer/drmhwc/hwcomposer.cppstatic float getDefaultDensity(uint32_t width, uint32_t height) {// Default density is based on TVs: 1080p displays get XHIGH density,// lower-resolution displays get TV density. Maybe eventually we'll need// to update it for 4K displays, though hopefully those just report// accurate DPI information to begin with. This is also used for virtual// displays and even primary displays with older hwcomposers, so be// careful about orientation.uint32_t h = width < height ? width : height;//根据平台 建议把1080p的修改为ACONFIGURATION_DENSITY_HIGH// if (h >= 1080) return ACONFIGURATION_DENSITY_XHIGH;if (h == 1080) {return ACONFIGURATION_DENSITY_HIGH;}else if(h>1080){return ACONFIGURATION_DENSITY_XHIGH;} else  return ACONFIGURATION_DENSITY_TV;
}

发现宽大于等于1080的设备,默认返回的密度为ACONFIGURATION_DENSITY_XHIGH 即为320
但对于我们设备来说,不需要为320 所以修改为=1080时 返回ACONFIGURATION_DENSITY_HIGH 即240
修改后编译更新固件,三方应用能正常判断设备为平板,问题解决。

RK3399平板设备无法被应用识别为平板类型 问题处理相关推荐

  1. 平板设备发展趋势设想

    平板领域会成为继PC以来最重要的战场 一个本被很多人不看好的大号iPod Touch的走红,揭示了这块巨大市场空缺. 人们需要价格适度.易于携带.便于观看.操作轻松.电力持久的可联网终端来随时随地娱乐 ...

  2. Vue/Nuxt框架开发的PC端网站兼容平板设备的

    大家做项目的时候有没有遇到过一些不符合常理的开发需求,例如:开发的时候PC端和H5是两套站点,一般H5站点会适配平板设备,但是如果需要改成PC端适配平板呢:前期开发PC端没有考虑到PC端会有需要兼容平 ...

  3. 平板android优化网络,Android版Firefox更新 针对平板设备优化

    如果Chrome确实不是你的菜,而你选择在Android设备上使用Firefox浏览器的话,那么这里有一条好消息.Mozilla日前在谷歌Play Store上发布了Android版Firefox浏览 ...

  4. USB及手机平板设备插拔响应解决方案

    USB及手机平板设备插拔响应解决方案 (一).基本原理:WM_DEVICECHANGE消息响应 一般WM_DEVICECHANGE只发给顶层窗口.你可以自己创建一个隐藏的顶层窗口来接收这个消息. (二 ...

  5. 【Android系统】虚拟按键 平板设备中重叠的问题

    问题背景:做的机器是平板,屏是横屏(分辨率是width > height, 1280*720 这种).Android 9源码编译的vbmeta, vendor, system下进去,虚拟按键(b ...

  6. 无接任何usb设备却提示无法识别usb设备

    无接任何usb设备却提示"无法识别usb设备",证明了主板的某个usb端口已经坏了 这时你可以打开"设备管理器"打开"通用串行总线控制器" ...

  7. 设备指示灯开关状态识别检测系统 yolov5

    设备指示灯开关状态识别检测系统是基于yolo网络深度学习模型,对现场画面进行实时监测识别.自动识别仪表示数或开关状态.我们使用YOLO(你只看一次)算法进行对象检测.YOLO是一个聪明的卷积神经网络( ...

  8. 硬件设备(门禁人脸识别机)调试总结

    公司让我开发几个对接硬件设备(门禁人脸识别机)等,有多台不同型号的人脸识别机,每种型号需要参考不同的厂家协议,再开发过程中遇到了很多坑,故需要将这些坑提炼出来,避免以后继续踩坑,如下: 硬件设备需要配 ...

  9. 向日葵android平板,远程控制安卓手机、平板设备——向日葵绝对OK

    远程控制在pc端早就存在了,利用该功能,用户可以通过网络控制在千里之外的电脑,让远程操控变的轻而易举.远程控制电脑,大家都了解,但是否了解PC远程控制安卓设备呢? 利用手机或者平板控制电脑,习以为常, ...

最新文章

  1. 解决SVN 每次操作都需要重输入用户名密码问题
  2. zookeeper安装启动报错引发的版本取用思考
  3. rem适配的浏览器_移动端网页布局适配rem方案小结
  4. mysql 范围内日期列表_MySQL:即使没有记录,也选择范围内的所有日期
  5. 大数据学习笔记55:搭建HBase环境
  6. 写了10年Javascript未必全了解的标识符顺序
  7. promiseKit 解析 iOS
  8. 获取图片外链的方法--网易相册
  9. python中正实数怎么表示_是的”数学地板(x) “和”int(x)“在Python中对正实数产生不同的结果?...
  10. STM32 实数FFT 极速配置
  11. 正则表达式详解(Perl)
  12. Java自学.接口学习笔记!
  13. IntelliJ IDEA 2021.2版文件显示图标有误的解决方法
  14. 第一次使用UOS虚拟机编译内核,查看内核配置【问题已更新】
  15. cpu上干硅脂怎么清理_安装CPU或者清理灰尘时CPU导热硅脂的使用方法及注意事项...
  16. 设计模式——单例模式之详细设计分析懒汉模式,以及懒汉模式两种同步方法
  17. cuda 纹理内存texture使用时显示不是模板解决办法
  18. MATLAB设计模糊控制器并用simulink仿真
  19. 开心网很火了 我给大家一个开心网注册的地址
  20. 离散制造业该如何实现工业信息化?

热门文章

  1. PowerDesigned15连接MySQL出现Could not initialize JavaVM时的详细解决步骤(图文)
  2. android权限声明
  3. 轻量的、可自定义 CSS 的 Lightbox 相册插件
  4. 电路板中的各种“地”
  5. 东华研究生复试------22 骑士斗恶龙
  6. xbox国行服务器修复,爆料称Xbox国行也遭到修复 将只能使用国行服务器
  7. 燃气灶突然打不着火的常见原因
  8. mysql where 空_Mysql设置查询条件(where)查询字段为NULL
  9. python安装失败0x80070570_【已放弃】Windows无法安装所需的文件。文件可能损坏或丢失。请确保安装所需的所有文件可用,并重新启动安装。错误代码:0x80070570...
  10. Docker - 镜像的分层 - busybox镜像制作