Как получить реальную модель устройства в Android?


Например, на моем телефоне Xperia mini,

Но я хочу получить "Sony Ericsson xperia mini" для этого телефона.

Возможно ли это?

2 2

2 ответа:

Для этого конкретного телефона (и, возможно, для многих других телефонов SonyEricsson) вы можете получить реальное имя устройства, только прочитав системное свойство, которое вы упомянули: ro.semc.product.model

Поскольку класс android.os.SystemProperties скрыт от публичного API, вам нужно будет использовать команду reflection (или exec getprop ro.semc.product.model) и захватить ее выход):

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;
  }
}

ST15I составляет модель код для Xperia мини. Поэтому, возможно, вы должны использовать Build.DEVICE, или построить базу соответствия для различных кодов их имен.