Ho riscontrato un problema durante l'aggiornamento manuale del widget tramite AppWidgetManager.updateAppWidget. La piattaforma è Android 2.2.Il widget di controllo dell'alimentazione mostrato per un breve momento durante l'aggiornamento del mio widget tramite AppWidgetManager, qual è il problema?
Ecco il codice:
ho dichiarato il widget in aggiunta a un'attività esistente nel Manifesto:
<receiver android:name=".Widget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>
Il widget di classe è stato dichiarato nel Widget.java:
public class Widget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
int use_static_ip;
RemoteViews remoteViews;
try {
use_static_ip = Settings.System.getInt(context.getContentResolver(), Settings.System.WIFI_USE_STATIC_IP);
if (use_static_ip == 0) { //DHCP
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_dhcp);
} else { //static IP
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_static);
}
Intent call_activity = new Intent(context, StaticIPToggle.class);
PendingIntent pending_call_activity = PendingIntent.getActivity(context, 0, call_activity, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_icon, pending_call_activity);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Nell'attività esistente ho aggiunto alcune linee per aggiornare manualmente il widget:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName componentName = new ComponentName(getApplicationContext(), Widget.class);
int[] ids = appWidgetManager.getAppWidgetIds(componentName);
Intent update_widget = new Intent();
update_widget.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
update_widget.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
getApplicationContext().sendBroadcast(update_widget);
Ma ora ho questo errore: Se il widget è onClicked, mostra il widget di impostazioni energetiche per un breve periodo (~ 0,5sec-1sec) prima che venga mostrato il widget desiderato.
Ecco uno screenshot di questo problema (sequenza da sinistra a destra): http://i.stack.imgur.com/rHkjw.jpg
In primo luogo c'è il widget come nella foto a sinistra, poi cambia l'immagine di mezzo e uno rimane lì o modifiche all'immagine subito dopo ~ 0,5-1sec.
Purtroppo non vedo errori nel codice, vero?
Speriamo che si può aiutarmi a risolvere questo problema;) Grazie in anticipo, saluti, Oli
Wow, sto avendo lo stesso problema; è bello vedere che non sono solo io, è un problema difficile da descrivere. Ottengo il bug con un HTC EVO 4G che esegue una ROM 2.2 personalizzata, ma non nell'emulatore. Il problema non si verifica anche con un Samsung Galaxy S. Qualcuno là fuori ha una soluzione? Ho lottato con questo per un po '. – Bobby
Ho visto questo testando il widget scrollablecontacts con sorgenti che sono [qui] (http://code.google.com/p/scrollablecontacts/) in un programma di avvio personalizzato che tenta di aggiungere il widget per molti contatti. Potrebbe essere legato al tuo codice impiegare troppo tempo per caricare il contenuto del widget, forse il caricamento in un servizio avviato dalla classe widget? –