一般来讲,在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. Android BaseAdapter用法

    BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return ...

  2. SubversionEdge 变更绑定地址

    接上一篇,由于VS的项目和SubversionEdge是通过固定的IP地址绑定在一起的,所以这就有个问题:如果由于种种原因,IP地址换了,那么绑定就失效了. 此时,VS项目的各种变更无法提交到Subv ...

  3. word 多级列表设置

    今天写论文碰到了这个问题, 希望能出现这样的效果: 第一章 1.1 1.2 第二章 2.1 2.2 ...... 为了达到这个效果,晕死了.因为我的标题不是普通的默认标题一标题二   比如同济一标题 ...

  4. Worse Is Better

    最近做的几件事和最近刚读到这篇文章(http://www.jwz.org/doc/worse-is-better.html)让我重新认识了KISS和这个所谓的Worse-is-better原则. 软件 ...

  5. Yii2中的环境配置

    默认的Debug配置 在入口文件中 defined ( 'YII_DEBUG' ) or define ( 'YII_DEBUG', true ); defined ( 'YII_ENV' ) or ...

  6. 在ASP.NET WebAPI 中使用缓存【Redis】

    初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...

  7. kali linux 2016.1 滚动更新源

    修改 /etc/apt/sources.list  #kali官方源 deb http://http.kali.org/kali kali-rolling main non-free contrib ...

  8. nw.js如何处理拖放操作

    nw.js如何处理拖放操作 其实拖放(drag-drop)操作是Html5的功能,不是nw.js的内置API,那么我们采用Html5应用一般的处理方法就可以了. 首先我们看一下一个正常的页面,直接拖放 ...

  9. 使用Location对象查询字符串参数

    location是BOM中最有用的对象之一: 1.它提供了与当前窗口中加载的文档有关的信息: 2.他还提供了一些导航功能. location对象的属性有: hash, host, hostname, ...

  10. Cassandra中的数据一致性

       Cassandra中数据一致性指的是数据行在各个复制节点(replicas)上的更新和同步程度.通过提供tunable consistency,Cassandra扩展了eventual cons ...