Es necesaria la reflexión si utilizo "if (android.os.Build.VERSION.SDK_INT> = 11)"

Estoy trabajando en una aplicación que apunta a la API 11 (3.0), pero minSDKVersion es 7 (2.1).

Genero mi PreferenceActivity de forma programática en lugar de XML. En Honeycomb, los diseños de preferencias tienen un punto incorporado para un icono que puede ir al lado de cada preferencia. Puede configurarlo con prefScreen.setIcon(R.drawable.my_icon);

Así que no quiero hacer esto en la API 7-10. ¿Es esta protección suficiente contra accidentes?

 if (android.os.Build.VERSION.SDK_INT>=11) prefScreen.setIcon(R.drawable.myIcon); 

La solución más elaborada que sé es segura es usar la reflexión para comprobar si ese método existe antes de intentar usarlo.

De acuerdo con http://developer.android.com/training/basics/activity-lifecycle/starting.html , se supone que es seguro utilizar la constante SDK_INT en Android 2.0 y versiones superiores para incluir llamadas a API más nuevas, sin utilizar la reflexión.

Precaución: El uso del SDK_INT para evitar que los sistemas antiguos ejecuten nuevas API funciona de esta forma en Android 2.0 (nivel 5 de la API) y sólo superior. Las versiones anteriores encontrarán una excepción de tiempo de ejecución.

Esto funcionó para mí:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ //code } 

Si el método no está disponible en versiones inferiores de la plataforma, se bloqueará cuando el archivo se cargue por el sistema (ni siquiera lo hará a la ejecución de su sentencia if )

Usted debe mirar el artículo sobre Lazy Loading para hacer la reflexión en el Android Dev Blog

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.