一般来讲,在android程序开发中进行需要判断设备类型和系统版本
1、设备类型判断(android.os.Build.MODEL
比如判断属于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版本-android.os.Build.VERSION.SDK_INT
比如判断系统是属于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字段,这正是我们想要的)。我们就可以用这个属性来与其他系统进行区分。
  • 最后一步,当然是怎么取出这个属性值了。

4、通过反射调用获取系统属性

// 判断是魅族操作系统
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 (Exception 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;
}

为了方便,封装一个反射调用系统SystemProperties类的工具类

public class SystemPropertiesReflect {
public static String get(String key, String value) {
try {
Method method = Class.forName("android.os.SystemProperties")
                    .getMethod("get", String.class, String.class);
return (String) method.invoke(null, key, value);
} catch (Exception e) {
}
return value;
} public static long getLong(String key, long value) {
try {
Method method = Class.forName("android.os.SystemProperties")
                    .getMethod("getLong", String.class, long.class);
return (Long) method.invoke(null, key, value);
} catch (Exception e) {
}
return value;
}
}

adb shell 查看系统属性(用来判断特殊的操作系统)的更多相关文章

  1. linux下查看系统属性

    inux下查看系统属性1.查看cpu信息查看所有cpu信息:cat /proc/cpuinfo查看cpu类型: grep "model name" /proc/cpuinfo2.查 ...

  2. adb获取Android系统属性(adb shell getprop ***)数据来源

    在Android系统中,它的根文件系统下有几个用于启动系统时需要的配置文件: /init.rc /default.prop /system/build.prop 通常我们可以通过命令getprop获取 ...

  3. Hierarchy Viewr 配合 adb 命令 查看窗口属性

    Hierarchy Viewr 可以看到当前 的 窗口层次如下

  4. Confluence 6 查看系统属性

    当你添加了内存,设置了代理(proxy)或者修改了 Java 的选项,通常比较难判断系统是否已经按照你的修改进行了配置和启动.这个页面将会帮助你查看 Confluence 站点运行使用的系统属性. 你 ...

  5. android利用adb shell查看activity的栈

    Android中怎么查看应用的activity栈? 1. 进入adb shell 2.可以直接输入dumpsys ,可以查看device的一些信息如 3.也可以直接输入 dumpsys activit ...

  6. adb shell 查看内存信息

    1.根据包名来查看指定的APP指定数据adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数据没有参数名,可以参考这个命令来看:adb shel ...

  7. adb shell 查看当前与用户交互的 activity

    adb shell dumpsys activity activities | grep mActivityComponent

  8. shell 查看系统有关信息

    磁盘: 查看磁盘空间或者挂载情况 df -ah 或者 df -h 内存: 查看内存使用情况 free -m total used free shared buffers cached Mem: -/+ ...

  9. shell查看系统基本信息脚本

    #!/bin/bash echo "IP:" ifconfig |grep "inet addr"|grep -v 127.0.0.1|awk '{print ...

随机推荐

  1. wpa_supplicant代码走读

    wpa_supplicant_add_iface wpa_supplicant_init_iface wpa_supplicant_set_driver wpa_config_read wpa_sup ...

  2. input只读属性区别

    readonly disabled 相同点:都是禁止输入 不同点:readonly属性会把该input提交到form表单 disabled属性不会把该input提交到form表单

  3. 将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决

    更新package 更改.net运行时的版本之后,出现了错误提示,说需要改新以下组件: EntityFramework, EntityFramework.zh-Hans, Microsoft.AspN ...

  4. 《JAVA与模式》之抽象工厂模式

    场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择 ...

  5. 海量用户-高并发SAAS产品测试上线流程

    海量用户高并发SAAS产品测试上线流程 SAAS产品测试上线流程-以Web插件产品为例子 1   概述 在互联网产品中,IT公司之间更加注重产品功能之间的协作,SAAS形态的产品扮演着越来越重要的作用 ...

  6. 作业三:代码规范、代码复审、PSP

    一.代码规范 我认为我们编写的代码都需要进行规范的操作,因为如果为了图省事情或者为了减少时间去完成这个编程.在最后检验的时候就会出现一些警告,导致你这次编程的代码出现问题,当出现问题的时候你在回头去检 ...

  7. 作业八—Alpha阶段项目总结

    一.项目的预期目标: 我们的图书管理系统之前的目标是做出可以让读者和管理员采用不同的搜索方式,并且时要做到读者和管理者两种不同的方式的!但是我们目前做到了部分搜索方式和管理员界面,主要原因是该项目如果 ...

  8. mssql 小技巧

    代码1:查看sql的执行时间 SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON select * from M ...

  9. [Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

    3D相关开发 [direct-X] 1.direct-X最小框架 [OpenGL] 1.环境搭建及最小系统 [OpenGL] 2.企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [ ...

  10. HTML5 WebStorage

    WebStorage是HTML5中本地存储的解决方案之一,在HTML5的WebStorage概念引入之前除去IE User Data.Flash Cookie.Google Gears等看名字就不靠谱 ...