Извлечение версии программного обеспечения Android

Есть ли способ получить версию API, в которой работает данный телефон?

Ответ 1

Как описано в документации 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), когда вы его используете, или ваше приложение будет (спасибо программисту Брюсу за точность).

Соответствующая документация по Android доступна здесь и здесь

Ответ 2

Очень просто:

   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

Ответ 3

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 или нет!

Чтобы использовать это, вы могли бы просто сделать это;

String androidOS = Build.VERSION.RELEASE;

Ответ 4

Принимая во внимание все сказанное, вот код, который я использую для обнаружения, если устройство имеет 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;
    }
}

Сообщите мне, если код не работает для вас.

Ответ 5

попробуйте следующее:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
     // only for gingerbread and newer versions
 }

Ответ 6

android.os.Build.VERSION.SDK должен дать вам значение уровня API. Вы можете легко найти сопоставление от уровня api до версии android в документации по Android. Я считаю, что 8 для 2.2, 7 для 2.1 и т.д.

Ответ 7

Получил это. Он использует метод getApplicationInfo() класса Context.

Ответ 8

Я предпочитаю иметь версию как номер, который будет обработан больше, чем я написал:

  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();
}

Ответ 9

Я улучшил код, который я использовал

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;
}

Ответ 10

Работает счастливое кодирование

String versionRelease = BuildConfig.VERSION_NAME;

versionRelease :- 2.1.17

Примечание Пожалуйста, убедитесь, что ваш пакет импорта правильный (импортируйте имя пакета вашего приложения, в противном случае он не будет работать должным образом)