Có cách nào để có phiên bản API mà điện thoại hiện đang chạy không?
Có cách nào để có phiên bản API mà điện thoại hiện đang chạy không?
Câu trả lời:
Như được mô tả trong tài liệu Android, cấp SDK (số nguyên) mà điện thoại đang chạy có sẵn trong:
android.os.Build.VERSION.SDK_INT
Lớp tương ứng với int này nằm trong android.os.Build.VERSION_CODES
lớp.
Mã ví dụ:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
// Do something for lollipop and above versions
} else{
// do something for phones running an SDK before lollipop
}
Biên tập : SDK_INT này khả dụng vì Donut (android 1.6 / API4) vì vậy hãy đảm bảo ứng dụng của bạn không tương thích retro với Cupcake (android 1.5 / API3) khi bạn sử dụng hoặc ứng dụng của bạn sẽ gặp sự cố (nhờ độ chính xác của Lập trình viên Bruce) .
minSdkVersion
thành 4
(Android 1.6) và tiếp tục.
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
int version = Build.VERSION.SDK_INT;
String versionRelease = Build.VERSION.RELEASE;
Log.e("MyActivity", "manufacturer " + manufacturer
+ " \n model " + model
+ " \n version " + version
+ " \n versionRelease " + versionRelease
);
E/MyActivity: manufacturer ManufacturerX
model SM-T310
version 19
versionRelease 4.4.2
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ể có một hệ điều hành không chuẩn (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 bất kể sử dụng phiên bản Android tiêu chuẩn hay không!
Để sử dụng nó, bạn có thể làm điều này;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
và public static final int SDK_INT
và Added in API level 4
cách thể int (không Integer) trở lại NULL
? NULL
là một trạng thái cho một đối tượng để Build hoặc VERSION của nó có thể null
về mặt lý thuyết nhưng trong trường hợp đó không chỉ SDK_INT
mà còn RELEASE
gây ra NPE. SDK_INT có thể có thể gây ra "Không có ngoại lệ phương thức như vậy" hoặc đại loại như thế nhưng không phải là null hoặc NPE. Nếu chỉ ROM tùy chỉnh phá vỡ các tài liệu và phương thức được khai báo là public static final Integer SDK_INT
. Tôi chỉ đang cố xác định bản chất của một vấn đề để giải quyết.
null
điều đó không có ý nghĩa.
Có tính đến tất cả, đây là mã tôi sử dụng để phát hiện nếu thiết bị có hệ điều hành Android hoặc Froyo mới hơn (2.2+):
public static boolean froyoOrNewer() {
// SDK_INT is introduced in 1.6 (API Level 4) so code referencing that would fail
// Also we can't use SDK_INT since some modified ROMs play around with this value, RELEASE is most versatile variable
if (android.os.Build.VERSION.RELEASE.startsWith("1.") ||
android.os.Build.VERSION.RELEASE.startsWith("2.0") ||
android.os.Build.VERSION.RELEASE.startsWith("2.1"))
return false;
return true;
}
Rõ ràng, bạn có thể sửa đổi nếu có điều kiện để đưa vào tài khoản phiên bản 1.0 & 1.5 của Android trong trường hợp bạn cần kiểm tra chung. Bạn có thể sẽ kết thúc với một cái gì đó như thế này:
// returns true if current Android OS on device is >= verCode
public static boolean androidMinimum(int verCode) {
if (android.os.Build.VERSION.RELEASE.startsWith("1.0"))
return verCode == 1;
else if (android.os.Build.VERSION.RELEASE.startsWith("1.1")) {
return verCode <= 2;
} else if (android.os.Build.VERSION.RELEASE.startsWith("1.5")) {
return verCode <= 3;
} else {
return android.os.Build.VERSION.SDK_INT >= verCode;
}
}
Hãy cho tôi biết nếu mã không hoạt động cho bạn.
thử cái này:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Hiểu rồi. Nó sử dụng getApplicationInfo()
phương thức của Context
lớp.
SDK.INT được hỗ trợ cho Android 1.6 trở lên
SDK được hỗ trợ cho tất cả các phiên bản
Vì vậy tôi làm:
String sdk_version_number = android.os.Build.VERSION.SDK;
Tín dụng cho: CommonsWare trên câu trả lời này
Tôi thích có phiên bản là số được xử lý dễ dàng hơn tôi đã viết này:
public static float getAPIVerison() {
Float f = null;
try {
StringBuilder strBuild = new StringBuilder();
strBuild.append(android.os.Build.VERSION.RELEASE.substring(0, 2));
f = new Float(strBuild.toString());
} catch (NumberFormatException e) {
Log.e("", "error retriving api version" + e.getMessage());
}
return f.floatValue();
}
Mã hóa hạnh phúc làm việc của nó
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Lưu ý Vui lòng đảm bảo gói nhập của bạn là chính xác (nhập gói gói tên ứng dụng của bạn nếu không nó không hoạt động đúng)
Tôi đã cải thiện mã tôi đã sử dụng
public static float getAPIVerison() {
float f=1f;
try {
StringBuilder strBuild = new StringBuilder();
strBuild.append(android.os.Build.VERSION.RELEASE.substring(0, 2));
f= Float.valueOf(strBuild.toString());
} catch (NumberFormatException e) {
Log.e("myApp", "error retriving api version" + e.getMessage());
}
return f;
}