6
 Build.VERSION.SDK_INT 

returns 28 instead of 29 when running on Android Q emulator. Is there anything I am missing? I am trying to add logic specifically for Android Q but I do not know how to determine this version correctly.

app.gradle file contains

    targetSdkVersion = 'Q'
    compileSdkVersion = 'android-Q'
Dr Mido
  • 2,414
  • 4
  • 32
  • 72
user1159819
  • 1,549
  • 4
  • 16
  • 29

2 Answers2

15

Before the API is finalized and officially becomes API 29 (where you'd use compileSdkVersion 29, etc), you must use BuildCompat.isAtLeastQ():

Checks if the device is running on a pre-release version of Android Q or newer.

Note: This method will return false on devices running release versions of Android. When Android Q is finalized for release, this method will be deprecated and all calls should be replaced with Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q.

Community
  • 1
  • 1
ianhanniballake
  • 191,609
  • 30
  • 470
  • 443
5

Note that Ian's solution requires AndroidX and is only available from Java/Kotlin code.

If your project is not ready for AndroidX just yet, or you need the value in a resource or the manifest, you can use bool resources:

  • Create res/values/bools.xml and put <bool name="isQ">false</bool> in there

  • Create res/values-v29/bools.xml and put <bool name="isQ">true</bool> in there

At this point, if you refer to the isQ resource, you will get true on Android Q and higher devices, false otherwise.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491