2012-09-17 2 views
15

Sto cercando di ottenere un elenco di tutte le istanze ACTIVE del mio widget. Nel metodo OnUpdate della mia AppWidgetProvider, sto facendo la seguente:AppWidgetManager getAppWidgetIds che restituiscono vecchi ID widget

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

Il problema è che se si aggiunge un widget alla homescreen e quindi eliminarlo, getAppWidgetIds restituisce comunque una lista che contiene tra gli altri l'id il widget che hai appena cancellato.

C'è un modo per recuperare gli ID dei soli widget attivi sulla schermata iniziale?

risposta

11

Mi sono imbattuto anche in questo. Suppongo che getAppWidgetIds sia semplicemente programmato per ottenere sempre tutti gli ID mai associati a quel provider di widget. Per risolvere questo problema, ho dovuto salvare l'ID Widget alle mie preferenze condivise salvando l'id nel metodoe cancellandolo nel metodo onDelete del mio 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

c'è un modo per dire all'appWidgetManager di controllare questo problema e rimuovere le voci non necessarie? –

+0

un modo leggermente migliore potrebbe essere quello di salvarlo in Config Activity se ne hai uno, poiché 'onUpdate()' viene chiamato più volte. –

Problemi correlati