ไม่มีใครรู้ว่าฉันสามารถตรวจสอบรุ่นของระบบ (เช่น1.0
, 2.2
ฯลฯ ) programatically?
ไม่มีใครรู้ว่าฉันสามารถตรวจสอบรุ่นของระบบ (เช่น1.0
, 2.2
ฯลฯ ) programatically?
คำตอบ:
android.os.Build.VERSION
ตรวจสอบ
CODENAME
: ชื่อรหัสพัฒนาปัจจุบันหรือสตริง "REL" หากนี่เป็นบิลด์ที่วางจำหน่ายINCREMENTAL
: ค่าภายในที่ใช้โดยตัวควบคุมแหล่งข้อมูลต้นแบบเพื่อแสดงถึงโครงสร้างนี้RELEASE
: สตริงรุ่นที่ผู้ใช้มองเห็นได้
ตัวอย่างวิธีใช้:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Build.Versionเป็นสถานที่ที่ไปสำหรับข้อมูลนี้ นี่คือข้อมูลโค้ดสำหรับวิธีการจัดรูปแบบ
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
ดูเหมือนว่า "Android SDK: 19 (4.4.4)"
Build.VERSION.RELEASE;
ที่จะให้ตัวเลขจริงของรุ่นของคุณ aka 2.3.3 หรือ 2.2 ปัญหาเกี่ยวกับการใช้ Build.VERSION.SDK_INT คือถ้าคุณมีโทรศัพท์รูทหรือรอมที่กำหนดเองคุณอาจไม่มีระบบปฏิบัติการมาตรฐาน (หรือที่เรียกว่า android ของฉันใช้ 2.3.5) และจะส่งคืนค่า null เมื่อใช้ Build.VERSION.SDK_INT ดังนั้น Build.VERSION.RELEASE จะทำงานไม่ว่าอะไรก็ตาม!
สำหรับการตรวจสอบเวอร์ชั่นของอุปกรณ์ที่มากกว่าหรือเท่ากับ Marshmallow ให้ใช้รหัสนี้
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
}
สำหรับ ckecking others เพียงแค่เปลี่ยน VERSION_CODES เช่น
K สำหรับ kitkat,
L สำหรับ loolipop N สำหรับ Nougat และอื่น ๆ ...
คุณสามารถหารุ่น Android Build.VERSION
กำลังมองหาที่
เอกสารแนะนำให้คุณตรวจสอบBuild.VERSION.SDK_INT
ค่าBuild.VERSION_CODES
ต่างๆ
นี่เป็นเรื่องปกติตราบใดที่คุณรู้ว่าBuild.VERSION.SDK_INT
มีการเปิดตัวใน API ระดับ 4 เท่านั้นซึ่งก็คือ Android 1.6 (Donut) ดังนั้นสิ่งนี้จะไม่ส่งผลกระทบต่อคุณ แต่ถ้าคุณต้องการให้แอปของคุณทำงานบน Android 1.5 หรือBuild.VERSION.SDK
เก่ากว่าคุณจะต้องใช้การเลิกใช้แทน
ฉันไม่สามารถแสดงความคิดเห็นกับคำตอบได้ แต่มีข้อผิดพลาดอย่างใหญ่หลวงในคำตอบของ Kaushik: SDK_INT ไม่เหมือนกับรุ่นของระบบ แต่จริงๆแล้วหมายถึงระดับ API
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
//this code will be executed on devices running ICS or later
}
ค่าBuild.VERSION_CODES.ICE_CREAM_SANDWICH
เท่ากับ 14. 14 คือระดับ API ของ Ice Cream Sandwich ในขณะที่รุ่นของระบบคือ 4.0 ดังนั้นหากคุณเขียน 4.0 โค้ดของคุณจะถูกเรียกใช้งานบนอุปกรณ์ทั้งหมดที่เริ่มต้นจาก Donut เนื่องจาก 4 คือระดับ API ของ Donut ( Build.VERSION_CODES.DONUT
เท่ากับ 4)
if(Build.VERSION.SDK_INT >= 4.0){
//this code will be executed on devices running on DONUT (NOT ICS) or later
}
ตัวอย่างนี้เป็นเหตุผลว่าทำไมการใช้ 'หมายเลขมายากล' เป็นนิสัยที่ไม่ดี
if(Build.VERSION.SDK_INT >= 15){
ตัวอย่างเช่นฟีเจอร์ใช้งานได้กับ api21 up เท่านั้นดังต่อไปนี้เราแก้ไขข้อบกพร่องใน api21 down
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
ระวังให้ดีว่าBuild.VERSION.SDK_INTไม่น่าเชื่อถือมันได้รับการกล่าวถึงโดย @ Falcon165o และเมื่อเร็ว ๆ นี้ฉันก็พบกับสิ่งนั้นเช่นกัน
ดังนั้นเพื่อให้ได้ข้อมูล String (ตามรายการเวอร์ชั่น Android ) ของ Android ที่ติดตั้งอยู่ในปัจจุบันฉันทำโค้ดแบบนี้:
ชวา
//Current Android version data
public static String currentVersion(){
double release=Double.parseDouble(Build.VERSION.RELEASE.replaceAll("(\\d+[.]\\d+)(.*)","$1"));
String codeName="Unsupported";//below Jelly bean OR above Oreo
if(release>=4.1 && release<4.4)codeName="Jelly Bean";
else if(release<5)codeName="Kit Kat";
else if(release<6)codeName="Lollipop";
else if(release<7)codeName="Marshmallow";
else if(release<8)codeName="Nougat";
else if(release<9)codeName="Oreo";
return codeName+" v"+release+", API Level: "+Build.VERSION.SDK_INT;
}
Kotlin
fun currentVersion(): String {
val release = java.lang.Double.parseDouble(java.lang.String(Build.VERSION.RELEASE).replaceAll("(\\d+[.]\\d+)(.*)", "$1"))
var codeName = "Unsupported"//below Jelly bean OR above Oreo
if (release >= 4.1 && release < 4.4) codeName = "Jelly Bean"
else if (release < 5) codeName = "Kit Kat"
else if (release < 6) codeName = "Lollipop"
else if (release < 7) codeName = "Marshmallow"
else if (release < 8) codeName = "Nougat"
else if (release < 9) codeName = "Oreo"
return codeName + " v" + release + ", API Level: " + Build.VERSION.SDK_INT
}
ตัวอย่างผลลัพธ์ที่ผลิต:
Marshmallow v6.0, ระดับ API: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
ใช้คลาสนี้
import android.os.Build;
/**
* Created by MOMANI on 2016/04/14.
*/
public class AndroidVersionUtil {
public static int getApiVersion() {
return android.os.Build.VERSION.SDK_INT;
}
public static boolean isApiVersionGraterOrEqual(int thisVersion) {
return android.os.Build.VERSION.SDK_INT >= thisVersion;
}
}
ใช้วิธีนี้:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
ให้คุณมีbash
บนอุปกรณ์ Android ของคุณคุณสามารถใช้ฟังก์ชั่นทุบตีนี้:
function androidCodeName {
androidRelease=$(getprop ro.build.version.release)
androidCodeName=$(getprop ro.build.version.codename)
# Time "androidRelease" x10 to test it as an integer
case $androidRelease in
[0-9].[0-9]|[0-9].[0-9].|[0-9].[0-9].[0-9]) androidRelease=$(echo $androidRelease | cut -d. -f1-2 | tr -d .);;
[0-9].) androidRelease=$(echo $androidRelease | sed 's/\./0/');;
[0-9]) androidRelease+="0";;
esac
[ -n "$androidRelease" ] && [ $androidCodeName = REL ] && {
# Do not use "androidCodeName" when it equals to "REL" but infer it from "androidRelease"
androidCodeName=""
case $androidRelease in
10) androidCodeName+=NoCodename;;
11) androidCodeName+="Petit Four";;
15) androidCodeName+=Cupcake;;
20|21) androidCodeName+=Eclair;;
22) androidCodeName+=FroYo;;
23) androidCodeName+=Gingerbread;;
30|31|32) androidCodeName+=Honeycomb;;
40) androidCodeName+="Ice Cream Sandwich";;
41|42|43) androidCodeName+="Jelly Bean";;
44) androidCodeName+=KitKat;;
50|51) androidCodeName+=Lollipop;;
60) androidCodeName+=Marshmallow;;
70|71) androidCodeName+=Nougat;;
80|81) androidCodeName+=Oreo;;
90) androidCodeName+=Pie;;
100) androidCodeName+=ToBeReleased;;
*) androidCodeName=unknown;;
esac
}
echo $androidCodeName
}