たとえば、私のXperiaミニ電話では、
- Build.MODELは「st15i」を返します
- Build.MANUFACTURERは「 SonyEricsson」を返します
しかし、私はこの電話のために「ソニーエリクソンxperiaミニ」を手に入れたいです。
出来ますか?
たとえば、私のXperiaミニ電話では、
しかし、私はこの電話のために「ソニーエリクソンxperiaミニ」を手に入れたいです。
出来ますか?
その特定の電話(およびおそらく他の多くのSonyEricsson電話)では、言及したシステムプロパティを読み取るだけで実際のデバイス名を取得できます。ro.semc.product.model
クラスはパブリックAPIからandroid.os.SystemProperties
隠されているため、リフレクションを使用する必要があります(またはexecgetprop 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 miniの型式コードです。したがって、 を使用するかBuild.DEVICE
、さまざまなコードとその名前の対応ベースを構築する必要があります。