#ifdef в Android - PullRequest
       29

#ifdef в Android

2 голосов
/ 16 марта 2012

Я пишу приложение для Android, мое приложение должно быть запущено под Android 2.2 и Android 4.0.3, я хочу использовать что-то вроде #ifdef в Android, но я все еще не могу найти способ, как я могу это сделать.

Пример кода

Android 4.0.3

if( android.os.Build.VERSION.SDK == 4.0.3)
{
    String str = "foo";
    boolean b = str.isEmpty();
}

Android 2.2

else {
    String str = "foo";
    boolean b = str.length() == 0;
}

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

Что вы можете предложить мне сделать?

Ответы [ 3 ]

3 голосов
/ 17 марта 2012

Что вы можете предложить мне сделать?

Новички в Java должны потратить время на изучение Java, прежде чем приступить к разработке Android. 4.0.3 не является допустимым целым числом в Java.

Вместо этого вы должны использовать:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
 // do something
}
1 голос
/ 17 марта 2012

#ifdef для обработки во время компиляции, и даже если бы это было общепринятой практикой в ​​Java (это не так, но существуют сторонние инструменты для поддержки этой концепции), это вряд ли поможет вам, так как вам нужночтобы принять решение во время выполнения о среде, в которой вы работаете (если вы не хотите создавать несколько пакетов?).

Как указывает ссылка fabricemarcelin (http://stackoverflow.com/questions/3506792/android-api-version-programmatically), вы можете определить версию своей системы времени выполнения)достаточно просто. Вам нужно будет записать ваше приложение в API, который, как вы знаете, будет существовать во время выполнения (система 2.2, если это ваш нижний предел), и вам нужно будет принять решение во время выполнения о вызове функций 4.0. Для 4.0функциональности, вам, вероятно, понадобится найти свои API-интерфейсы с помощью рефлексии.

Я использовал рефлексию для доступа к вещам, которые доступны только в более новых системах Android, и он работает хорошо. Один совет - организоватьрасположение рефлексии / API в начале вашего приложения, если это разумно, а если нет,хотя бы договориться об этом только один раз за звонок.

1 голос
/ 16 марта 2012

Вы можете просто проверить Уровень API и вызвать Build.VERSION.SDK_INT

...