获取Android机型设备信息的适配差异问题
作为Android开发者,当你需要将产品在某某品牌的某某机型上进行兼容性适配的时候,最为基础的适配方法是通过代码层面区分适配机型来为程序进行针对性的改变程序执行流向。
例如
- Build类包含的信息
主要读取的是手机系统\system\build.prop(Galaxy Nexus为例)
2. 部分已知适配问题
由于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层导致的。
3. 适配建议
根据以上情况希望可以为Android开发者同学在适配工作中提供一定的借鉴和帮助。
我们给出的第一种解决方案是“规避已知问题”。例如,厂商信息不唯一时,我们就搜罗该厂商信息的所有可能,从而进行准确的判断,如下:
这里写图片描述
当获取机型信息为unknown时,我们还可以通过手机设备的其他信息来判断手机具体机型,如下:
这里写图片描述