最近在论坛上有人问相关问题,正好最近看了些相关的东西,项目中也用到过,写篇博客来总结下。
首先说下获取到这些信息有什么用?
用于区分不同设备或是运营商做版本控制用。在应用开发过程中经常会遇到不同的运营商或是客户的需求是不一样的,或者不同的SDK版本提供的API存在差异,你又不能仅仅只是因为一两处功能的差异就多维护一套代码,这个代价太高。所以常用的方法就是通过各种系统配置项来做功能区分,不同的配置实现不同的逻辑,以达到多个版本兼容、降低维护成本的目的。
如何查看所有可读的系统配置项?
1、通过adb命令查看:adb shell -> getprop
2、通过build.prop文件查看:可以在用手机自带的log抓取工具保存的log文件中找到这个文件
Android提供了两个类供开发者使用获取设备信息:android.os.Build 和 android.os.SystemProperties
android.os.SystemProperties是Android提供的内部类,只能供具有系统权限或是参与平台编译的应用使用。这个类为开发者提供了一种读取以键值对的方式存储的系统配置方法,
原则上通过getprop命令显示的系统配置项都是可以通过SystemProperties.get()/set()方法获取和设置的。除了Android系统默认的一些配置项,还可以根据项目需要自定义(需要修改平台代码)。
/**
* Gives access to the system properties store. The system properties
* store contains a list of string key-value pairs.
*
* {@hide}
*/
android.os.Build是Android提供给三方应用使用的类。在这个类里面还定义了android.os.Build.VERSION和android.os.Build.VERSION_CODES这两个内部类。具体都可以读取到哪些设备信息可以看一下对应的源码。在网上随便搜了一个,可以做一个参考。
http://www.2cto.com/kf/201503/379741.html
通过查看Build.java的源码发现这个类本质上还是通过的SystemProperties.get()方法来获取对应的系统配置信息的。
两者的区别就在于SystemProperties可以读到所有系统的配置,而Build只能读取到有限的系统配置项。另一个差别是需要权限不同,SystemProperties需要系统权限,Build则不作权限限制。
可能还有其他高端方法我就不知道了,有知道的同学欢迎分享,目前是做平台开发的以上这两种已经足够使用了。
以上分析均是基于Android M