標籤:
一般來講,在android程式開發中進行需要判斷裝置類型和系統版本
1、裝置類型判斷比如判斷屬於Google Nexus 5,Nexus 7,MIUI v5, MIUI v6,三星裝置,魅族裝置等;這類型的問題都使用的android.os.Build.MODEL來判斷,android.os.Build.MODEL是一個String變數,可以根據String中一些特殊欄位來判斷android裝置屬於什麼裝置,比如判斷Nexus 7,代碼入下public static boolean isN7() {
return "Nexus 7".equals(android.os.Build.MODEL);
} 所以平時開發過程中如果不知道一個裝置的MODEL值,寫個測試程式輸出android.os.Build.MODEL值,然後再將該值用到我麼的程式中參與判斷。
2、系統版本判斷(api版本)比如判斷系統是屬於2.3, 3.0, 4.4, 5.0 等,這種屬性判斷使用的是系統的android.os.Build.VERSION.SDK_INT變數。最常用的情境是用來判斷一些系統函數的api版本,比如有些方法只有高版本的api才有,低版本上使用會導致程式崩潰。 但是還有一種情境導致還要第三種方法才能搞定使用情境:現在作業系統大多是開源的,預設是google 的android系統,但是別忘了還有魅族的Flyme OS 和小米的 Miui,它們是android的變種。如果用非小米手機也裝上了miui,後者是非魅族手機裝上了魅族的Flyme OS,這種情況怎麼判斷呢。拿魅族來說:顯然這個時候不能用判斷裝置類型的方式,因為非魅族裝置安裝了魅族系統。所以這個時候只能判斷這個作業系統是魅族的Flyme OS,它的作業系統應該具備一些它自己的特性,所以只要找到一個唯一的特性就可以解決上面的問題了。
3、判斷特殊的作業系統---擷取系統屬性加以研究(魅族為例)進入adb shell,擷取魅族系統屬性:
- 首先進入cmd,然後輸入adb shell 命令進入adb shell (前提:adb必須要配置到系統內容變數中)
C:\Users\Administrator>
adb shell
[email protected]:/ $
[email protected]:/ $
cd system
cd system
[email protected]:/system $
[email protected]:/system $
cat build.prop
cat build.prop
# begin build properties
# autogenerated by buildinfo.sh
ro.build.cta=noncta
ro.build.id=KTU84P
ro.build.mask.id=4.4.4-1423716396_wo
ro.build.args=
ro.build.inside.id=4.4.4-20150212124636
ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.version.sdk=19
ro.build.version.codename=REL
ro.build.version.release=4.4.4 .....還有很多
- 篩選包含Flyme字元的屬性,因為既然是魅族作業系統,Flyme這個詞最能代表它的屬性
[email protected]:/system $
cat build.prop | grep Flyme
cat build.prop | grep Flyme
ro.build.version.incremental=m76.Flyme_OS_4.2.2.1.20150212124636
ro.build.display.id=Flyme OS 4.2.2.1U
ro.build.description=meizu_mx4pro-user 4.4.4 KTU84P m76.Flyme_OS_4.2.2.1.2015021
2124636 release-keys
ro.build.fingerprint=Meizu/meizu_mx4pro/mx4pro:4.4.4/KTU84P/m76.Flyme_OS_4.2.2.1
.20150212124636:user/release-keys
[email protected]:/system $ 帥選到四個屬性:ro.build.version.incremental ro.build.display.id ro.build.description ro.build.fingerprint
- 換一個其他的安裝有魅族作業系統裝置,重複上面的步驟。最終會發現 ro.build.display.id這個屬性可以當做一個魅族作業系統唯一的特性(因為這個屬性值幾乎都會包含Flyme欄位,這正是我們想要的)。我們就可以用這個屬性來與其他系統進行區分。
- 最後一步,當然是怎麼取出這個屬性值了。
// 判斷是魅族作業系統public static boolean isMeizuFlymeOS() {
return getMeizuFlymeOSFlag().toLowerCase().contains("flyme");
} /**
* 擷取魅族系統操作版本標識
*/
public static String getMeizuFlymeOSFlag() {
return getSystemProperty("ro.build.display.id", "");
} private static String getSystemProperty(String key, String defaultValue) {
try {
Class<?> clz = Class.forName("
android.os.SystemProperties");
Method get = clz.getMethod("get", String.class, String.class);
return (String)get.invoke(clz, key, defaultValue);
} catch (ClassNotFoundException e) {
} catch (NoSuchMethodException e) {
} catch (IllegalAccessException e) {
} catch (IllegalArgumentException e) {
} catch (InvocationTargetException e) {
}
return defaultValue;
} 下面是小米作業系統的一些相關方法/**
* 擷取MIUI版本名
*/
public static String getMIUIVersionName() {
return getSystemProperty(
"ro.miui.ui.version.name", null);
} // MIUI v5版本public static boolean isV5(){
if("V5".equalsIgnoreCase(getMIUIVersionName())){
return true;
}
return false;
}
adb shell 查看系統屬性(用來判斷特殊的作業系統)