2012-09-17 20 views
15

Estoy tratando de obtener una lista de todas las instancias activas de mi widget. En el método OnUpdate de mi AppWidgetProvider, estoy haciendo lo siguiente:AppWidgetManager getAppWidgetIds devolviendo identificadores de widgets viejos

// Get all ids 
ComponentName thisWidget = new ComponentName(context, this.getClass()); 
int[] lastWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 

El problema es que si se agrega un widget a la pantalla de inicio y luego eliminarlo, getAppWidgetIds todavía devuelve una lista que contiene entre otros el id de el widget que acaba de eliminar.

¿Hay alguna manera de recuperar los ID de solo los widgets que están activos en la pantalla de inicio?

Respuesta

11

Me encontré con esto también. Supongo que getAppWidgetIds está simplemente programado para obtener siempre todos los ID asociados con ese proveedor de widgets. Para resolver esto, tuve que guardar la Id. De widget en mis preferencias compartidas guardando la Id. En el método onUpdate y eliminándola en el método onDelete de mi AppWidgetProvider.

public class MyProvider extends AppWidgetProvider { 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     // Update your widget as normal 

     // If the Id isn't already saved to your db/app preference, save it now 
    } 

    public void onDeleted (Context context, int[] appWidgetIds) { 
     // Remove each id passed in through appWidgetIds 
     // "un-save" them from your db or app preferences 
    } 
} 
+3

¿Hay alguna manera de decirle al appWidgetManager que verifique este problema y elimine las entradas innecesarias? –

+0

una forma un poco mejor puede ser guardarlo en la actividad de configuración si tiene uno, ya que 'onUpdate()' se llama muchas veces. –