Чи є спосіб отримати версію API, що телефон зараз працює?
Чи є спосіб отримати версію API, що телефон зараз працює?
Відповіді:
Як описано в документації на Android, рівень SDK (ціле число), на якому працює телефон, доступний у:
android.os.Build.VERSION.SDK_INT
Клас, відповідний цьому int, є у android.os.Build.VERSION_CODES
класі.
Приклад коду:
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
}
Редагувати : Цей SDK_INT доступний з Donut (android 1.6 / API4), тому переконайтесь, що ваша програма не є ретро-сумісною з Cupcake (android 1.5 / API3), коли ви користуєтесь нею, або ваш додаток завершиться (завдяки програмісту Брюсу за точність) .
minSdkVersion
на 4
(Android 1.6) і йти далі.
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;
Це дасть вам фактичну кількість вашої версії; aka 2.3.3 або 2.2. Проблема з використанням Build.VERSION.SDK_INT полягає в тому, що якщо у вас є вкорінений телефон або користувальницький rom, у вас може бути нестандартна ОС (він же андроїд працює під керуванням 2.3.5), і це поверне нуль при використанні Build.VERSION.SDK_INT тому Build.VERSION.RELEASE працюватиме незалежно від використання стандартної версії Android чи ні!
Щоб використовувати його, ви могли просто зробити це;
String androidOS = Build.VERSION.RELEASE;
int android.os.Build.VERSION.SDK_INT
і public static final int SDK_INT
і Added in API level 4
як би Int (НЕ Integer) повернення NULL
? NULL
є станом для об'єкта, тому його збірка або ВЕРСІЯ може бути null
теоретично, але в такому випадку не тільки, SDK_INT
але RELEASE
і спричинить NPE. SDK_INT, ймовірно, може спричинити "Немає такого винятку з методу" або щось подібне, але не буде нульовим або NPE. Якщо тільки користувальницький ROM порушує документи та метод, оголошений як public static final Integer SDK_INT
. Я просто намагаюся визначити характер проблеми, щоб вирішити проблему.
null
це не має сенсу.
Беручи до уваги все сказане, ось код, який я використовую для виявлення, чи у пристрої є Froyo чи новіша ОС Android (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;
}
Очевидно, ви можете змінити це, якщо за умови враховувати 1.0 та 1.5 версії Android, якщо вам потрібна загальна перевірка. Ви, мабуть, закінчите щось подібне:
// 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;
}
}
Повідомте мене, якщо код не працює для вас.
спробуйте це:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
// only for gingerbread and newer versions
}
Зрозумів. Її використовують getApplicationInfo()
метод Context
класу.
SDK.INT підтримується для Android 1.6 і новіших версій
SDK підтримується для всіх версій
Я також:
String sdk_version_number = android.os.Build.VERSION.SDK;
Кредити: CommonsПостерігайте за цією відповіддю
Я вважаю за краще, щоб версія як номер була оброблена легше, ніж я написав:
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();
}
Його робоче щасливе кодування
String versionRelease = BuildConfig.VERSION_NAME;
versionRelease :- 2.1.17
Примітка. Переконайтесь, що ваш пакет імпорту є правильним (імпортуйте ім'я пакета програми, інакше він не працює належним чином)
Я вдосконалив код, який я використав
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;
}