Câu trả lời:
Kiểm tra android.os.Build.VERSION
.
CODENAME
: Tên mã phát triển hiện tại hoặc chuỗi "REL" nếu đây là bản dựng phát hành.INCREMENTAL
: Giá trị bên trong được sử dụng bởi điều khiển nguồn cơ bản để thể hiện bản dựng này.RELEASE
: Chuỗi phiên bản người dùng có thể nhìn thấy.
Ví dụ cách sử dụng nó:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Build.Version là nơi dành cho dữ liệu này. Đây là một đoạn mã cho cách định dạng nó.
public String getAndroidVersion() {
String release = Build.VERSION.RELEASE;
int sdkVersion = Build.VERSION.SDK_INT;
return "Android SDK: " + sdkVersion + " (" + release +")";
}
Trông giống như "SDK Android: 19 (4.4.4)"
Build.VERSION.RELEASE;
Điều đó sẽ cung cấp cho bạn những con số thực tế của phiên bản của bạn; aka 2.3.3 hoặc 2.2. Vấn đề với việc sử dụng Build.VERSION.SDK_INT là nếu bạn có điện thoại đã root hoặc rom tùy chỉnh, bạn có thể không có hệ điều hành chuẩn nào (hay còn gọi là Android của tôi đang chạy 2.3.5) và điều đó sẽ trả về null khi sử dụng Build.VERSION.SDK_INT vì vậy Build.VERSION.RELEASE sẽ hoạt động không có vấn đề gì!
Bạn có thể tìm hiểu phiên bản Android đang xem Build.VERSION
.
Các tài liệu khuyên bạn nên kiểm tra Build.VERSION.SDK_INT
đối với các giá trị trong Build.VERSION_CODES
.
Điều này tốt miễn là bạn nhận ra rằng nó Build.VERSION.SDK_INT
chỉ được giới thiệu trong API cấp 4, tức là nói Android 1.6 (Donut). Vì vậy, điều này sẽ không ảnh hưởng đến bạn, nhưng nếu bạn muốn ứng dụng của mình chạy trên Android 1.5 trở về trước thì bạn sẽ phải sử dụng phần không dùng nữa Build.VERSION.SDK
.
Tôi không thể nhận xét về các câu trả lời, nhưng có một lỗi rất lớn trong câu trả lời của Kaushik: SDK_INT không giống với phiên bản hệ thống nhưng thực sự đề cập đến Cấp độ API.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
//this code will be executed on devices running ICS or later
}
Giá trị Build.VERSION_CODES.ICE_CREAM_SANDWICH
bằng 14. 14 là cấp độ API của Ice Cream Sandwich, trong khi phiên bản hệ thống là 4.0. Vì vậy, nếu bạn viết 4.0, mã của bạn sẽ được thực thi trên tất cả các thiết bị bắt đầu từ Donut, vì 4 là cấp API của Donut ( Build.VERSION_CODES.DONUT
bằng 4).
if(Build.VERSION.SDK_INT >= 4.0){
//this code will be executed on devices running on DONUT (NOT ICS) or later
}
Ví dụ này là một lý do tại sao sử dụng 'số ma thuật' là một thói quen xấu.
if(Build.VERSION.SDK_INT >= 15){
Ví dụ: một tính năng chỉ hoạt động cho api21 trở lên sau đây chúng tôi sửa các lỗi trong api21 xuống
if(Build.VERSION.SDK_INT >= 21) {
//only api 21 above
}else{
//only api 21 down
}
Xin lưu ý rằng Build.VERSION.SDK_INT không đáng tin cậy, nó được đề cập bởi @ Falcon165o và gần đây tôi cũng gặp phải vấn đề đó.
Vì vậy, để có được dữ liệu Chuỗi (dựa trên danh sách phiên bản Android ) của Android hiện đang cài đặt, tôi đã tạo một mã như thế này:
Java
//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
}
Ví dụ về một đầu ra mà nó tạo ra:
Marshmallow v6.0, Cấp API: 23
if (Build.VERSION.SDK_INT >= ApiHelper.VERSION_CODES.HONEYCOMB_MR2) {
//do anything you like.
}
sử dụng lớp học này
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;
}
}
Sử dụng phương pháp này:
public static String getAndroidVersion() {
String versionName = "";
try {
versionName = String.valueOf(Build.VERSION.RELEASE);
} catch (Exception e) {
e.printStackTrace();
}
return versionName;
}
Nếu bạn có bash
trên thiết bị Android của mình, bạn có thể sử dụng chức năng bash này:
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
}