2012-03-31 9 views
12

Para las versiones de Android 3.0 y posteriores, deseo llamar a cierto método. ¿Hay alguna manera de verificar si un determinado método está disponible en la versión de Android en ejecución?¿Cómo verifico que HoneyComb o superior se está ejecutando y, en consecuencia, invoco un método para esa versión?

Para ser más precisos, mi MinSDK es 7 (Android 2.1), TargetSDK es 8 (Android 2.2) y necesito probar si está funcionando HoneyComb Android 3.0 o superior. Dependiendo de eso, ¿cómo puedo llamar a ese método HoneyComb?

Surge la segunda parte de la pregunta, porque simplemente llamando a ese método HoneyComb, no se compilará, ya que estoy construyendo contra 2.2.

Respuesta

27

Para ser más precisos, mi MinSDK es 7 (Android 2.1), TargetSDK es 8 (Android 2.2) y necesito probar si HoneyComb Android 3.0 o una versión superior se está ejecutando. Dependiendo de eso, ¿cómo puedo llamar a ese método HoneyComb?

Paso # 1: Establezca su objetivo de compilación al nivel de API más alto que desea llamar directamente y, por lo tanto, compilar en contra. Su objetivo de compilación (por ejemplo, compileSdkVersion en Android Studio, Proyecto> Propiedades> Android en Eclipse) no está relacionado con su android:targetSdkVersion.

Paso # 2: Como las otras respuestas han indicado, a continuación, puede llamar condicionalmente métodos dentro de un bloque protector:

if (android.os.Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.HONEYCOMB) { 
    // call something for API Level 11+ 
} 

La segunda parte de la pregunta surge, porque simplemente llamando a que el método de nido de abeja, no compilará, ya que estoy compilando contra 2.2.

Necesita cambiar su objetivo de compilación para que sea API Nivel 11 o superior si desea llamar directamente a los métodos API Nivel 11 o superior.

+5

También vale la pena mencionar que los miembros 'android.os.Build.VERSION_CODES. *' Se reemplazan en tiempo de compilación (iirc, ¿no?), Por lo que no tiene que preocuparse por 'HONEYCOMB',' HONEYCOMB_MR2' y por lo tanto al no estar disponible (es decir, definido) en los sistemas que ejecutan Gingerbread y debajo ... puede verificarlos en sistemas anteriores. – davidcesarino

+0

Excelente tx, estaba asumiendo falsamente que el objetivo de compilación de eclipe se refiere a android: targetVersion. Yipee! – mrd

+0

Lo único que es menos agradable, es que esto me obliga a probar en mi tableta HoneyComb en lugar de en mis 2 teléfonos móviles. Afortunadamente, es solo una declaración, así que la comento hasta que el desarrollo finalice. Nunca uso el emulador para probar, para ralentizar ... – mrd

4
if (Build.VERSION.SDK_INT >= x) {} 

X es el número api, nido de abeja es de 11 Puede encontrar los números de API aquí: Platform versions

Cuestiones relacionadas