Intereting Posts
Цель использования CATEGORY_HOME в манифесте android? Android Canvas, несколько путей с различными значениями масштабирования Расположение музыкальных файлов Android? SocketException при загрузке большого размера zip-файла Несколько файлов dex определяют Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat с Gradle Почему я не могу попасть в точку останова при запуске приложения Xamarin для Android? Стирание повернутого изображения в Android не показывает стирание правильного пути Как правильно выбрать изображение для Android Складной элемент списка в навигации Ящик Android – Как отслеживать приложение. Возобновляет только при выходе и возвращении в приложение? NestedScrollView и WebView Предотвращение пикселизации изображений, отступы listViews и добавление закругленных углов Включить монитор из приложения Google TV Как определить, есть ли у edittext английские символы Недопустимое описание проекта при импорте проекта в Eclipse

Определить код версии Android N

Можно ли определить, работает ли пользователь Android N?

У меня есть Nexus 6 с Android N Developer Preview. Если я попытаюсь получить версию сборки с Build.VERSION.SDK_INT , она вернет 23, что равно Android Marshmallow.

Solutions Collecting From Web of "Определить код версии Android N"

Цитирую себя :

Следуя подходу, который Google использовал для предварительного просмотра M Developer, вы можете вместо этого проверить Build.VERSION.CODENAME :

 public static boolean iCanHazN() { return("N".equals(Build.VERSION.CODENAME)); } 

Я не смотрел Build.VERSION.RELEASE , как было предложено комментарием zgc7009, хотя это тоже может быть возможностью.

Кроме того, если вы читаете это в далеком будущем, где Android N отправлен в окончательном виде, вы должны иметь возможность использовать Build.VERSION.SDK_INT и Build.VERSION_CODES.N . Вышеупомянутый хак объясняется особенностями того, как Google обрабатывает эти предварительные просмотры разработчиков.

Подход 1: (рекомендуется) Используйте библиотеку поддержки android.support.v4.os.BuildCompat.isAtLeastN .

Подход 2: используйте это как «реальный» код версии: Build.VERSION.SDK_INT < 23 || Build.VERSION.PREVIEW_SDK_INT == 0 ? Build.VERSION.SDK_INT : Build.VERSION.SDK_INT + 1 Build.VERSION.SDK_INT < 23 || Build.VERSION.PREVIEW_SDK_INT == 0 ? Build.VERSION.SDK_INT : Build.VERSION.SDK_INT + 1 Build.VERSION.SDK_INT < 23 || Build.VERSION.PREVIEW_SDK_INT == 0 ? Build.VERSION.SDK_INT : Build.VERSION.SDK_INT + 1 .

Я бы рекомендовал использовать значение Integer для проверки версии Android, а не строки

 public boolean isAndroidN() { return Build.VERSION.SDK_INT == Build.VERSION_CODES.N; } 

Просто помните, что необходимо иметь compileSdkVersion до 24 или выше в manifestests.xml:

 compileSdkVersion 24 

Я обнаружил, что поведение Build.VERSION.RELEASE и Build.VERSION.CODENAME весьма различно в зависимости от того, является ли это полной производственной версией ОС Android или предварительного просмотра для разработчиков. Мы пошли со следующим механизмом. Вы не можете полагаться только на одно значение, если вы хотите учитывать более одного сценария.

Это то, что я нашел, это случай, когда Galaxy S7 запускает производственный выпуск Nougat и Nexus 5X, работающий на O DP1.

Galaxy S7 Nougat Build.VERSION.BASE_OS: Build.VERSION.CODENAME: REL Build.VERSION.INCREMENTAL: G930FXXU1DQB3 Build.VERSION.PREVIEW_SDK_INT: 0 Build.VERSION.RELEASE: 7.0 Build.VERSION.SDK_INT: 24 Build.VERSION.SECURITY_PATCH: 2017-01-01

Nexus 5X O Build.VERSION.BASE_OS: Build.VERSION.CODENAME: O Build.VERSION.INCREMENTAL: 3793265 Build.VERSION.PREVIEW_SDK_INT: 1 Build.VERSION.RELEASE: O Build.VERSION.SDK_INT: 25 Build.VERSION.SECURITY_PATCH: 2017-03-05

 // release builds of Android (ie not developer previews) have a CODENAME value of "REL" // check this. if it's REL then you can rely on value of SDK_INT (SDK_INT is inaccurate for DPs // since it has the same value as the previous version of Android) // if it's not REL, check its value. it will have a letter denoting the Android version (N for Nougat, O for... er... O and so on) boolean laterThanNougat = false; if(Build.VERSION.CODENAME.equals("REL")) { Log.i(TAG, "This is a release build"); // since this is a release build, we can rely on value of SDK_INT if (android.os.Build.VERSION.SDK_INT > 25) { Log.i(TAG, "This is later than Nougat"); laterThanNougat = true; } else { Log.i(TAG, "This is Nougat or before"); } } else { Log.i(TAG, "This is NOT a release build"); // since this is not a release build, we can't rely on value of SDK_INT. must check codename again if(Build.VERSION.CODENAME.compareTo("N") > 0) { Log.i(TAG, "This is later than Nougat"); laterThanNougat = true; } else { Log.i(TAG, "This is Nougat or before"); } }