一般来讲,在android程序开发中进行需要判断设备类型和系统版本 1、设备类型判断 比如判断属于Google Nexus 5,Nexus 7,MIUI v5, MIUI v6,三星设备,魅族设备等; 这类型的问题都使用的android.os.Build.MODEL来判断,android.os.Build.MODEL是一个String变量,可以根据String中一些特殊字段来判断android设备属于什么设备,比如判断Nexus 7,代码入下 public static boolean isN7(){
return "Nexus 7".equals(android.os.Build.MODEL);
} 所以平时开发过程中如果不知道一个设备的MODEL值,写个测试程序输出android.os.Build.MODEL值,然后再将该值用到我么的程序中参与判断。 2、系统版本判断(api版本) 比如判断系统是属于2.3, 3.0, 4.4, 5.0 等,这种属性判断使用的是系统的android.os.Build.VERSION.SDK_INT变量。 最常用的场景是用来判断一些系统函数的api版本,比如有些方法只有高版本的api才有,低版本上使用会导致程序崩溃。 但是还有一种场景导致还要第三种方法才能搞定 使用场景:现在操作系统大多是开源的,默认是google 的android系统,但是别忘了还有魅族的Flyme OS 和小米的 Miui,它们是android的变种。如果用非小米手机也装上了miui,后者是非魅族手机装上了魅族的Flyme OS,这种情况怎么判断呢。拿魅族来说:显然这个时候不能用判断设备类型的方式,因为非魅族设备安装了魅族系统。所以这个时候只能判断这个操作系统是魅族的Flyme OS,它的操作系统应该具备一些它自己的特性,所以只要找到一个唯一的特性就可以解决上面的问题了。 3、判断特殊的操作系统---获取系统属性加以研究(魅族为例) 进入adb shell,获取魅族系统属性:
  • 首先进入cmd,然后输入adb shell 命令进入adb shell (前提:adb必须要配置到系统环境变量中)
C:\Users\Administrator> adb shell
shell@mx4pro:/ $
  • 进入system目录
shell@mx4pro:/ $ cd system
cd system
shell@mx4pro:/system $
  • 查看系统属性
shell@mx4pro:/system $ cat build.prop
cat build.prop
# begin build properties
# autogenerated by buildinfo.sh
ro.build.cta=noncta
ro.build.id=KTU84P
ro.build.mask.id=4.4.4-1423716396_wo
ro.build.args=
ro.build.inside.id=4.4.4-20150212124636
ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4.4 .....还有很多
  • 筛选包含Flyme字符的属性,因为既然是魅族操作系统,Flyme这个词最能代表它的属性
shell@mx4pro:/system $ cat build.prop | grep Flyme
cat build.prop | grep Flyme
ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.display.id=Flyme OS 4.2.2.1U
ro.build.description=meizu_mx4pro-user 4.4.4 KTU84P m76.Flyme_OS_4.2.2.1.2015021
2124636 release-keys
ro.build.fingerprint=Meizu/meizu_mx4pro/mx4pro:4.4.4/KTU84P/m76.Flyme_OS_4.2.2.1
.20150212124636:user/release-keys
shell@mx4pro:/system $ 帅选到四个属性:ro.build.version.incremental ro.build.display.id ro.build.description ro.build.fingerprint
  • 换一个其他的安装有魅族操作系统设备,重复上面的步骤。最终会发现ro.build.display.id这个属性可以当做一个魅族操作系统唯一的特性(因为这个属性值几乎都会包含Flyme字段,这正是我们想要的)。我们就可以用这个属性来与其他系统进行区分。
  • 最后一步,当然是怎么取出这个属性值了。
// 判断是魅族操作系统 public static boolean isMeizuFlymeOS() {
return getMeizuFlymeOSFlag().toLowerCase().contains("flyme");
} /**
* 获取魅族系统操作版本标识
*/
public static String getMeizuFlymeOSFlag() {
return getSystemProperty("ro.build.display.id", "");
} private static String getSystemProperty(String key, String defaultValue) {
try {
Class<?> clz = Class.forName(" android.os.SystemProperties");
Method get = clz.getMethod("get", String.class, String.class);
return (String)get.invoke(clz, key, defaultValue);
} catch (ClassNotFoundException e) {
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (IllegalArgumentException e) {
} catch (InvocationTargetException e) {
}
return defaultValue;
} 下面是小米操作系统的一些相关方法 /**
* 获取MIUI版本名
*/
public static String getMIUIVersionName() {
return getSystemProperty( "ro.miui.ui.version.name", null);
} // MIUI v5版本 public static boolean isV5(){
if("V5".equalsIgnoreCase(getMIUIVersionName())){
return true;
}
return false;
}

更多相关文章

  1. Android(安卓)危险权限、权限组列表和所有普通权限
  2. android 利用java反射调用系统类的隐藏方法
  3. Android入门之四大组件
  4. Android控件属性全解
  5. Android(安卓)Configuration系统设置
  6. Android保存图片到系统相册并更新
  7. 部分 CM11 系统 Android(安卓)平板运行植物大战僵尸 2 黑屏的解
  8. Android的存储系统—Vold与MountService分析(三)
  9. Android(安卓)手写动画框架

随机推荐

  1. android开发环境_反编译
  2. 完美解决Android SDK Manager无法更新
  3. 屏蔽EditText自动获取焦点
  4. Android Q&A | setOnItemClickListener(A
  5. Android 设置控件不可见且不占用空间
  6. 转:Android世界的15款开源的游戏开发引擎
  7. android native socket correspond
  8. Android DrawBitmap绘制图像
  9. Android之Shared Preferences
  10. Android OpenGL ES2.0编程教程系列之总览