Понимание уровней Android API

Вышли Jelly Bean, и у них есть несколько довольно приятных особенностей. Мой вопрос заключается в том, что я хочу ориентироваться на как можно больше устройств, но в то же время иметь приложение, которое может, если возможно, использовать все функции на самом высоком уровне API.

Так скажем, например, у меня есть это

<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="16"/>

И я создаю свое приложение на API 16. Есть ли способ ограничить определенные части кода, чтобы они запускались только в том случае, если вы используете устройство, способное его запускать? Например, если я хочу NFC, то эту функцию могут использовать только устройства с имбирным пряником и выше, иначе froyo down даже не увидит эту функцию.


person Springy    schedule 04.07.2012    source источник


Ответы (2)


По сути, вы можете использовать многие новые API, представленные в Android 3.0 (например, механизм фрагментов), включая поддержку Android версии 4 в качестве справочной библиотеки.

Вы можете найти некоторые ссылки здесь:

http://developer.android.com/reference/android/support/v4/app/package-summary.html

и здесь:

http://developer.android.com/tools/extras/support-library.html

С другой стороны, если вы хотите использовать функцию NFC, например, вы можете объявить эту функцию использования:

 <uses-feature android:name="android.hardware.nfc" android:required="true" />

или, если вы хотите предоставить альтернативный код для устройств, не поддерживающих эту функцию, вы можете сделать что-то вроде этого:

 if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) {
        //code for devices with NFC support
 } else {
      //code for others devices
 }
person Stefano Ortisi    schedule 04.07.2012
comment
Скажем, например, я строю с использованием API уровня 16, включая v4, и если на моем устройстве работает API 9 пряников, то я могу получить фрагменты для устройств, на которых работает пряник? Таким образом, API v4 переопределит то, что включено для уровня API 16, и скомпилирует его так, чтобы gingerbead понял? - person Springy; 05.07.2012

Начиная с ADT r16, мы можем использовать сканирование Lint и проверять проект на наличие всех новых API, ознакомьтесь с моим ответом здесь подробности:

NewApi: находит API-доступы к API, которые не поддерживаются во всех целевых версиях API.

В качестве альтернативы, вместо условного ветвления вашего кода по функции (ответ Стефано), вы также можете условно разветвить свой код по уровню API:

if (android.os.Build.VERSION.SDK_INT >= 9) {
  // do NFC stuff
}

Надеюсь это поможет.

person yorkw    schedule 04.07.2012