2012-08-23 32 views
2

例如,我的Xperia迷你電話,如何在Android中獲得真實的設備模型?

,但我希望得到「索尼愛立信xperia mini'這款手機。

可能嗎?

+0

檢查http://developer.android.com/reference/android/os/Build.html#MODEL這一個U可使用'Build.MANUFACTURER'爲型號名稱和'Build.PRODUCT'產品名稱 – Aamirkhan

+1

謝謝,Buil d.PRODUCT返回'ST15i_1249-8388',這不是我想要的。我在手機中檢查了build.prop文件,'xperia mini'在'ro.semc.product.model'下。 –

回答

3

對於特定的電話(或許對於很多人索尼愛立信手機),你只能通過閱讀你所提到的系統性能得到真正的設備名稱使用的反射(或者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

@ldolon很好......但是對於三星手機..? –

0

ST15I XPeria mini的型號代碼。所以,也許你應該使用Build.DEVICE,ord爲各個代碼的名字建立一個對應的基礎。 ro.semc.product.model

由於android.os.SystemProperties類是從公共API,你將需要隱藏的:

+0

謝謝,Build.DEVICE與Build.MODEL相同,並返回'st15i'。 –

相關問題