一般来讲,在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. linux-9基本命令之-wget

    1.wget 命令用于下载网络文件,格式:"wget[参数] 下载地址" wget 参数 -b 后台下载模式 -O 下载到指定的目录 -t 最大尝试次数 -p 下载页面内所有的资源 ...

  2. [转]C#调用FFMPEG,并异步读取输出信息的代码

    http://www.cnblogs.com/Leo_wl/archive/2011/12/31/2308841.html

  3. STC12C5A60S2笔记5(省电模式)

    1. 基本特性 STC12C5A60S2系列单片机可运行三种省电模式以降低功能,STC正常工作电流是2mA~7mA,而掉电模式下<0.1uA,空闲模式下<0.1mA. 1) 空闲模式:由电 ...

  4. Java多线程2:Thread中的实例方法

    Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...

  5. chrome浏览器渲染白屏问题剖析

    刚截图十几次,终于捕捉到了这个白屏现象,hiahia~~ 大家可以很清晰地看到下边还木有渲染完毕的透明层,这是一个十分普遍的问题,经常遇到.我的浏览器版本是 到目前为止应该是最新版(release版本 ...

  6. python _、__和__xx__的区别

    python _.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家.英文原文地址:Difference between _, __ and __xx__ in Pytho ...

  7. Facebook 发布「流程」

    时不时就会在面试过程中碰到有候选人问 Facebook 是否采用 Scrum 之类的敏捷方法,偶尔也会有中国的朋友问及 Facebook 上线流程.我通常会简单说几句,然后说「如果你真感兴趣的话,去搜 ...

  8. 运用JS设置cookie、读取cookie、删除cookie

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...

  9. win2008 强制删除故障集群配置

    在正常删除Cluster 节点之后,再添加节点时,报“节点已经加入群集”,无法加入,注册表信息删除后可正常移除Cluster服务,如下: win2008故障转移群集无法退出节点时 删除注册表中这两个后 ...

  10. MSSQL Server数据库的四种连接方法和sql连接字符串

    MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...