Я полностью игнорирую любую более старую версию, чем Eclair (7), Android 2.1, и очень скоро мы прекращаем поддержку 2.1. Но вы можете использовать SDK вместо SDK_INT.
ATom
12
SDK был определен на уровне API 4. Вместо этого используйте SDK_INT.
Эрдоместер
У меня есть вопрос: если он работает в системе старше GINGERBREAD, то мы не можем получить android.os.Build.VERSION_CODES.GINGERBREAD, произойдет ли сбой приложения?
HongchaoZhang
Нет, потому что GINGERBREAD будет заменен только номером во время сборки Java. Нужно использовать только большую версию Android.
ATom
97
Build.Version - это место для получения этих данных. Вот фрагмент кода для его форматирования.
Это даст вам фактические номера вашей версии; ака 2.3.3 или 2.2. Проблема с использованием Build.VERSION.SDK_INT заключается в том, что если у вас есть рутированный телефон или пользовательский rom, у вас может быть не стандартная ОС (она же мой android под управлением 2.3.5), и она будет возвращать ноль при использовании Build.VERSION.SDK_INT так что Build.VERSION.RELEASE будет работать несмотря ни на что!
Это нормально, если вы понимаете, что он 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}
Этот пример является причиной, по которой использование «магического числа» является вредной привычкой.
Учитывая, что у вас есть 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 integercase $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 in10) 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
}
Ответы:
Проверьте
android.os.Build.VERSION
.источник
Пример как это использовать:
источник
Build.Version - это место для получения этих данных. Вот фрагмент кода для его форматирования.
Похоже, это "Android SDK: 19 (4.4.4)"
источник
Это даст вам фактические номера вашей версии; ака 2.3.3 или 2.2. Проблема с использованием Build.VERSION.SDK_INT заключается в том, что если у вас есть рутированный телефон или пользовательский rom, у вас может быть не стандартная ОС (она же мой android под управлением 2.3.5), и она будет возвращать ноль при использовании Build.VERSION.SDK_INT так что Build.VERSION.RELEASE будет работать несмотря ни на что!
источник
Для проверки версии устройства, которая больше или равна Зефиру, используйте этот код.
для взлома других просто измените VERSION_CODES, например,
K для kitkat,
L для loolipop N для Nougat и так далее ...
источник
Вы можете узнать версию 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.
Значение
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 >= 15){
Например, функция работает только для api21 вверх, ниже мы исправляем ошибки в api21 down
источник
Имейте в виду, что Build.VERSION.SDK_INT не надежен, он упоминается @ Falcon165o, и недавно я тоже столкнулся с ним.
Итак, чтобы получить данные String (на основе списка версий Android ) для установленного в настоящее время Android, я сделал код, подобный следующему:
Ява
Котлин
Пример вывода, который он производит:
источник
источник
использовать этот класс
источник
Используйте этот метод:
источник
Учитывая, что у вас есть
bash
на вашем устройстве Android, вы можете использовать эту функцию bash:источник