Ответы:
Проверьте 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;
Это даст вам фактические номера вашей версии; ака 2.3.3 или 2.2. Проблема с использованием Build.VERSION.SDK_INT заключается в том, что если у вас есть рутированный телефон или пользовательский rom, у вас может быть не стандартная ОС (она же мой android под управлением 2.3.5), и она будет возвращать ноль при использовании Build.VERSION.SDK_INT так что Build.VERSION.RELEASE будет работать несмотря ни на что!
Вы можете узнать версию Android, глядя на Build.VERSION
.
Документация рекомендует проверять Build.VERSION.SDK_INT
значения в Build.VERSION_CODES
.
Это нормально, если вы понимаете, что он Build.VERSION.SDK_INT
был представлен только в API Level 4, то есть Android 1.6 (Donut). Так что это не повлияет на вас, но если вы хотите, чтобы ваше приложение работало на Android 1.5 или более ранней версии, вам придется использовать устаревшую версию Build.VERSION.SDK
.
Я не могу комментировать ответы, но в ответе Каушика есть огромная ошибка: 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 вверх, ниже мы исправляем ошибки в 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;
}
Котлин
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
}
Пример вывода, который он производит:
Зефир v6.0, уровень API: 23
использовать этот класс
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, вы можете использовать эту функцию bash:
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
}