2015-05-18 12 views
9

La mia applicazione ospita i widget installati dall'utente, come un'applicazione di avvio.Alcuni widget di terze parti interrompono l'aggiornamento dopo l'aggiornamento dell'applicazione

Dopo aver associato il widget, tutto funziona correttamente. I widget vengono creati, aggiornati automaticamente, posso fare clic per navigare all'interno delle viste.

Tutto funziona correttamente, finché non aggiorno la mia applicazione da Play Store (o manualmente con un APK firmato).

Dopo l'aggiornamento, i widget continuano a essere visualizzati ma non verranno più aggiornati. Alcuni widget funzionano quando faccio clic su di essi ma la vista è bloccata e non viene mai aggiornata fino a quando non ricreare il widget (ottenere un nuovo ID e collegarlo).

ho provato a forzare un aggiornamento utilizzando

Intent intent = new Intent(); 
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
intent.setComponent(appWidgetInfo.provider); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] 
       {appWidgetId}); 
context.sendBroadcast(intent); 

ma questo non aiuta ...

ho voluto provare un aggiornamento forzato al clic ma non ho trovato alcuna modo per ottenere RemoteViews del widget (in quanto questo non è il mio widget, l'ho appena ospitato).

RemoteViews views = 
     new RemoteViews(context.getPackageName(),R.layout.mywidget_layout); 

Intent updateIntent = new Intent(); 
updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
updateIntent.putExtra(myWidgetProvider.WIDGET_IDS_KEY, ids); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(
     context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

views.setOnClickPendingIntent(R.id.view_container, pendingIntent); 

implementata anche una AppWidgetProvider per ascoltare i cambiamenti ID widget (APPWIDGET_HOST_RESTORED) ma non viene chiamato sul mio aggiornamento dell'applicazione.

Il mio prossimo passo sarebbe quello di ricreare tutti i widget dopo l'aggiornamento dell'applicazione, ma in realtà preferisco non farlo.

Apprezzerei qualsiasi aiuto!

+0

Cosa: dispositivo su cui si esegue il test? versione os? launcher (ad esempio, Samsung touch wiz, ecc.)? –

+0

Un sacco di dispositivi ... La mia app è pubblicata .. molti utenti segnalano questo problema e sono riuscito a riprodurlo su 3 diversi dispositivi, Android versione 4.1 e successive. –

+0

@downvoter si prega di commentare perché così posso migliorare la mia domanda. –

risposta

5

Risolto.

L'ultima cosa che volevo fare era probabilmente la prima cosa che avrei dovuto provare. Sono passato a ricreare i widget e ho scoperto che non è necessario ricrearli completamente, basta richiamare lo bindAppWidgetIdIfAllowed() con lo stesso ID widget che ho già.

Il metodo sarà return true se tutto è ancora OK e in caso contrario, il widget potrebbe non essere più installato o è necessario attivare la schermata di configurazione.

3
  1. Determinate funzionalità Android si interromperanno se il widget è installato sulla scheda SD. Prova a spostarlo nella memoria del dispositivo e ri-testare.

  2. assicurarsi di utilizzare chiavi univoche con putExtra (MyWidgetProvider.WIDGET_ID_KEY, ids);

  3. Non utilizzare putExtra (AppWidgetManager.EXTRA_WIDGET_IDS, ids);

+0

Grazie, ma non è questo il problema. Succede principalmente con i widget di sistema, come il widget Google Play Music. –

+0

2-3 sono rilevanti solo se si dispone di un AppWidgetProvider e si esegue l'override del metodo onReceive()/onUpdate(), che non ho poiché non ho un widget personale. Ho appena ospitato i widget. Dovrei creare il mio AppWidgetProvider anche nel mio caso? –

+0

Forse dai uno sguardo a https://gist.github.com/rock3r/9809139 –

Problemi correlati