Android 识别ROM信息

  Android 识别ROM信息

  国内的这么多ROM定制厂商真是烦啊,做个东西需要识别ROM信息分开处理真的很让人崩溃好吧。就算你们都要定制独一无二的ROM,能不能定制一个统一的协议,把自己的厂商名写在这个属性了?让大家都能直接拿到ROM信息不好么?这个世界能不能少点套路,多点真诚。

  Build.DISPLAY

  但很遗憾,各个厂商的ROM信息并不能成功拿到,所以就要通过一些特殊途径来获得ROM信息。

  ADB shell 查看设备系统信息

  通过使用ADB shell 的下面这个命令,就能够查询到设备的一些运行时的信息,然后在这些一大片的系统信息中去寻找对应ROM才会有的信息,通过这个去判定ROM信息。

  getprop

物联网

  比如,在MIUI系统中

  ro.miui.ui.version.name

  这行信息只有MiUi系统中才会有,通过这个,就能判断系统是不是MIUI系统。

  在 Android 代码中可以通过这个方法来获取设备的系统信息,在通过事先测试出的各个ROM的独特信息,就能匹配出各个厂商的ROM。

  p = Runtime.getRuntime().exec("getprop ro.miui.ui.version.name");

  reader = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);

  line = reader.readLine();

  最后分享一下我测试出的几个ROM厂商的独特信息,还有我包装的一个区分ROM的工具类。

  > [ro.build.display.id]: [EMUI3.1_H60-L02_6.2.1] (华为)

  > [ro.build.display.id]: [Flyme 5.2.1.1A] (魅族)

  > [ro.miui.ui.version.name]: [V7] (小米)

  > [ro.build.version.opporom]: [V3.0] (oppo)

  以上是测试出的几个品牌厂商的ROM的信息

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStreamReader;

  /**

  * 该工具类用来识别各种ROM型号。

  * 通过获取Runtime,运行adb命令查看系统信息来识别不同的ROM

  * Created by wlk on 2016/7/28.

  */

  public class DistinguishRom {

  public static final String MIUI = "miui";

  public static final String EMUI = "EMUI";

  public static final String FLYME = "Flyme";

  public static final String COLOROS = "coloros";

  public static final String UNKNOW = "unknow";

  public static final String RUNTIME_MIUI = "ro.miui.ui.version.name";

  public static final String RUNTIME_DISPLAY = "ro.build.display.id";

  public static final String RUNTIME_OPPO = "ro.build.version.opporom";

  public static String getRomInfo(){

  String romInfo = null;

  if (!StringUtils.isBlank(getRomProperty(RUNTIME_MIUI))){

  romInfo = MIUI;

  }else if (!StringUtils.isBlank(getRomProperty(RUNTIME_OPPO))){

  romInfo = COLOROS;

  }else if(getRomProperty(RUNTIME_DISPLAY).contains(EMUI)) {

  romInfo = EMUI;

  }else if (getRomProperty(RUNTIME_DISPLAY).contains(FLYME)){

  romInfo = FLYME;

  }else{

  romInfo = UNKNOW;

  }

  return romInfo;

  }

  private static String getRomProperty(String prop) {

  String line = "";

  BufferedReader reader = null;

  Process p = null;

  try {

  p = Runtime.getRuntime().exec("getprop "+prop);

  reader = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);

  line = reader.readLine();

  }catch (IOException e) {

  e.printStackTrace();

  }finally {

  if(reader != null) {

  try {

  reader.close();

  } catch (IOException e) {

  e.printStackTrace();

  }

  }

  if(p != null) {

  p.destroy();

  }

  }

  return line;

  }

 

  }