AppWidgetProvider: onAppWidgetOptionsChanged no se llama en la ubicación del widget

De acuerdo con la documentación de onAppWidgetOptionsChanged en AppWidgetProvider: "Esto se llama cuando el widget se coloca por primera vez y en cualquier momento el widget se cambia el tamaño."

Sin embargo, cuando coloco mi widget en el lanzador de acciones en Android 4.2 y 4.3, este método no se llama inmediatamente (sólo después de cambiar el tamaño del widget). Lo probé en mi propia aplicación, así como en https://github.com/commonsguy/cw-omnibus/tree/master/AppWidget/Resize de CommonsWare

¿Hay algo que me falta?

EDIT: El único lanzador que he encontrado que hace que este método funcione correctamente como se describe en la documentación de Google es Action Launcher Pro; buen trabajo y gracias, Chris Lacy! ¿Por qué el lanzador de acciones no funciona? ¿Alguien más tiene este problema?

gracias por llamar la atención sobre este tema. Estaré actualizando la documentación de Android para reflejar esto.

Sin embargo, en lugar de forzar una llamada a onAppWidgetOptionsChanged () en onUpdate (), recomendamos un enfoque como el siguiente:

public class AppWidget extends AppWidgetProvider { .... @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); final int N = appWidgetIds.length; for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); updateWidget(context, appWidgetManager, appWidgetId, options); } } public void onAppWidgetOptionsChanged (Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { updateWidget(context, appWidgetManager, appWidgetId, newOptions); } private void updateWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle options) { // Do whatever you need to do to the widget. Include any customization based // on the size, included in the options. Be sure to have a graceful fallback if // no valid size data is included in the bundle. } ... } 

Por lo tanto, la documentación dice acerca de onUpdate (): "… [Si] ha declarado una actividad de configuración, este método no se llama cuando el usuario agrega el Widget de la aplicación, pero es llamado para las actualizaciones posteriores". Bueno, al parecer eso tampoco es cierto. onUpdate () se llama, aunque tengo una actividad de configuración para mi widget.

De todos modos, llamar a onAppWidgetOptionsChanged () de onUpdate () parece ser una solución en los lanzadores basados ​​en 4.2 + porque onUpdate () se llama cuando el widget se coloca por primera vez en la pantalla de inicio y podemos obtener el Bundle appWidgetOptions de la instancia de AppWidgetManager.

 @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]){ super.onUpdate(context, appWidgetManager, appWidgetIds); final int N = appWidgetIds.length; for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); if(options!=null){ int nwidth = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); int nheight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT); onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, options); } } } 
  • El widget de Android funciona bien en el emulador pero en el teléfono se convierte en el widget de Google App
  • AppWidget no se muestra en la lista de widgets de lanzador en dispositivos de lollipop solamente
  • Imagen en Widget
  • El widget de la aplicación de Android se bloquea después de un período de tiempo indefinido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.