【Android适配问题集锦-文件类】获取Android机型设备信息的适配差异问题

这里写图片描述
  作为Android开发者,当你需要将产品在某某品牌的某某机型上进行兼容性适配的时候,最为基础的适配方法是通过代码层面区分适配机型来为程序进行针对性的改变程序执行流向。

这里写图片描述

1. Build类包含的信息
  Android Build类可以从系统属性中提取设备硬件和版本信息,主要功能:
这里写图片描述
  主要读取的是手机系统\system\build.prop(Galaxy Nexus为例)
这里写图片描述

2. Build工作原理

  • Build类:记录一系列静态属性

厂商/品牌/机型/主板型号/CPU指令集···········
这里写图片描述

Build类的记录的设备信息主要是调用SystemProperties类的get()方法,SystemProperties的实现主要由JNI接口实现。
android.os.SystemProperties此类未开放(未提供给SDK API),能够在frameworks和android自带的APP里使用(比如Settings app里),不能被其他app直接使用,只能通过Build等类来使用.

  • SystemProperties:系统属性

相当于windows的注册表,由key和value组成,且都是核心系统的一个基本机制。
Android 的系统属性包括两部分:文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中(目录下),后者则通过API方式使用。
/default.prop
/system/build.prop
/system/default.prop
/data/local.prop
/data/property目录下的所有presist属性(以presist.开头)
JNI接口:在android_os_SystemProperties.cpp定义,在frameworks/base/core/jni/AndroidRuntime.cpp中注册JNI。

3. 部分已知适配问题

  由于Android系统的开放性,各大OEM厂商会以Android为基础为手机开发自己的ROM,上面的程序片段通过判断厂商和机型的方式来进行代码层面的适配,理论上这里不会有问题发生,但实际上获取厂商信息和机型信息的时候会出现你想像不到情况发生:

情况一:厂商信息获取不唯一
摩托罗拉的厂商信息不仅是”motorola”还有”mot”和”FIH”;
索爱的厂商信息不仅是”Sony”还有”Sony Ericsson”;
HTC的厂商信息不仅是”HTC”还有”HUN”;
OPPO的厂商信息不仅是”OPPO”还有”alps”;
酷派的厂商信息不仅是”CoolPad”还有”YuLong”;
…..
情况二:机型信息获取比较奇葩
红米model值为数字,model值为“2013022”的奇葩字符串。
…..
情况三:厂商信息或机型信息获取为unknown
联想A60获取厂商信息为unknown;造成这种问题的原因是厂商随意改动framework层导致的。

4. 适配建议
  根据以上情况希望可以为Android开发者同学在适配工作中提供一定的借鉴和帮助。
我们给出的第一种解决方案是“规避已知问题”。例如,厂商信息不唯一时,我们就搜罗该厂商信息的所有可能,从而进行准确的判断,如下:
这里写图片描述
当获取机型信息为unknown时,我们还可以通过手机设备的其他信息来判断手机具体机型,如下:
这里写图片描述
第二种解决方案,也是最理想的解决方案“设备数据匹配”。大家都知道,从android.os.build类中,我们可以获取到很多设备的信息,既然一个机型的设备是一样的,我们可以统计所有机型的设备信息得到一个数据库,当机型获取为unknown时,通过已知信息匹配,得到达到一定匹配率的机型(90%或者更高),就可以认为匹配成功。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android机型适配是指将应用程序适配到不同的Android设备上,以确保应用在各种手机和平板电脑上正常运行。适配过程包括处理不同的屏幕尺寸、分辨率、像素密度、操作系统版本和设备功能的差异。 为了实现Android机型适配,可以采取以下几个步骤: 1. 使用布局文件:使用XML布局文件来定义应用程序的用户界面,这样可以根据屏幕尺寸和方向自动调整布局。 2. 使用尺寸单位:在布局文件中使用dp或sp等相对单位,而不是像素单位。这样可以确保界面元素在不同密度的屏幕上以相似的比例进行缩放。 3. 处理屏幕尺寸和方向变化:通过重写Activity的onConfigurationChanged()方法,可以在屏幕旋转或尺寸变化时重新布局并适应新的屏幕条件。 4. 适配资源文件:为不同的设备提供不同的资源文件,如图片、图标和字符串等。可以使用不同的文件夹命名规则(如drawable-hdpi、drawable-mdpi等)来存放不同密度的资源文件。 5. 使用功能检测:如果应用使用了某些特定功能(如摄像头、GPS等),可以使用Android提供的API进行功能检测,并在设备不支持时提供适当的替代方案。 总之,Android机型适配是一个综合考虑屏幕尺寸、分辨率、像素密度、操作系统版本和设备功能等因素的过程,通过合理的布局和资源文件管理,确保应用在各种设备上都能良好运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值