如何在Android中获得真正的设备模型?

时间:2012-08-23 12:37:25

标签: android device

例如,在我的Xperia迷你手机上,

但是我想为这部手机获得'索尼爱立信xperia mini'

有可能吗?

2 个答案:

答案 0 :(得分:3)

对于那个特定的手机(也许还有许多其他SonyEricsson手机),你只能通过阅读你提到的系统属性来获得真实的设备名称:ro.semc.product.model

由于android.os.SystemProperties类对公共API隐藏,因此您需要使用反射(或exec getprop ro.semc.product.model命令和grab its output):

public String getSonyEricssonDeviceName() {
  String model = getSystemProperty("ro.semc.product.model");
  return (model == null) ? "" : model;
}


private String getSystemProperty(String propName) {
  Class<?> clsSystemProperties = tryClassForName("android.os.SystemProperties");
  Method mtdGet = tryGetMethod(clsSystemProperties, "get", String.class);
  return tryInvoke(mtdGet, null, propName);
}

private Class<?> tryClassForName(String className) {
  try {
    return Class.forName(className);
  } catch (ClassNotFoundException e) {
    return null;
  }
}

private Method tryGetMethod(Class<?> cls, String name, Class<?>... parameterTypes) {
  try {
    return cls.getDeclaredMethod(name, parameterTypes);
  } catch (Exception e) {
    return null;
  }
}

@SuppressWarnings("unchecked")
private <T> T tryInvoke(Method m, Object object, Object... args) {
  try {
    return (T) m.invoke(object, args);
  } catch (InvocationTargetException e) {
    throw new RuntimeException(e);
  } catch (Exception e) {
    return null;
  }
}

答案 1 :(得分:0)

ST15I XPeria mini的型号代码。所以也许你应该使用Build.DEVICE,或者为他们的名字建立各种代码的对应基础。