2011-08-15 5 views
24

¿es posible mostrar el widget en el cuadro de diálogo "Agregar a la pantalla de inicio> Widgets" solo para una determinada versión de Android sin cargar dos APK y asignar los números de versión de SDK adecuados?¿es posible mostrar el widget solo para una determinada versión de Android?

+2

sería interesante, no solo depende de la versión sino de más cosas. – berlindev

+0

por supuesto que :) simplemente escribí la versión de Android porque tengo problemas con 2.1 debido a las restricciones de la API. – Cloudgiant

Respuesta

30

tengo una manera de hacerlo sin ningún código por ejemplo:

En sus res \ dir valores de crear un archivo bools.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <bool name="honeycombOrAbove">false</bool> </resources>

Crear un archivo de valores-v11 dir (para honeycomb o valores superiores), copie el archivo y establezca el valor en verdadero.

Luego, en el manifiesto para el receptor del widget, use: android: enabled = "@ bool/honeycombOrAbove". También lo usé en la actividad de configuración para el widget.

Esto significa que el widget está desactivado en el momento de la instalación.

+1

Solución brillante ya que funciona cuando la aplicación está instalada y esto es más un problema de aprovisionamiento. Gracias por esto, me salvaste un montón de buscar una solución esta mañana. –

+1

Solución perfecta. ¡Esta debería haber sido la respuesta aceptada! –

+1

¡Solución muy inteligente! Definitivamente la mejor respuesta! – pdegand59

9

Puede hacerlo con el componentEnableSetting. Simplemente desactive el widget que no desea que aparezca en la lista. El cambio se activará después de reiniciar el teléfono.

Context context = getApplicationContext(); 
String str1 = "org.classname.to.widget.provider"; 
ComponentName componentName = new ComponentName(context, str1); 
PackageManager packageManager = getPackageManager(); 

int versioncode = Integer.valueOf(android.os.Build.VERSION.SDK);  

//enable widget 
packageManager.setComponentEnabledSetting(componentName, 1, 1); 

//disable widget 
packageManager.setComponentEnabledSetting(componentName, 2, 1); 
+0

Sí, esta solución funciona aunque tuve que cambiarla un poco, ya que este código busca el número de versión de la aplicación y no el SDK. ¡Muchas gracias! – Cloudgiant

+0

¿qué cambiaste? puedo editar y luego puede aprobar la respuesta como la solución para su problema – berlindev

+0

solo esta línea "int versioncode = Integer.valueOf (android.os.Build.VERSION.SDK);" y agregué si las condiciones para 2.1 para deshabilitar y 2.2 o superior para habilitar – Cloudgiant

Cuestiones relacionadas