Ich habe ein Problem, wenn ich mein Widget manuell über AppWidgetManager.updateAppWidget aktualisiere. Plattform ist Android 2.2.Power-Control-Widget für einen kurzen Moment angezeigt, wenn mein eigenes Widget über AppWidgetManager aktualisiert, was ist das Problem?
Hier ist der Code:
ich das Widget erklärte zusätzlich zu einer bestehenden Aktivität im Manifest:
<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>
Die Widget-Klasse in Widget.java erklärt wurde:
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();
}
}
}
In der vorhandenen Aktivität habe ich einige Zeilen hinzugefügt, um das Widget manuell zu aktualisieren:
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);
Aber jetzt habe ich diesen Fehler: Wenn das Widget onClicked ist, zeigt es die Energie-Einstellungen-Widget für einen kurzen Zeitraum (~ 0,5sec-1sec), bevor das gewünschte Widget angezeigt wird.
Hier ein Screenshot dieser Ausgabe (Sequenz von links nach rechts): http://i.stack.imgur.com/rHkjw.jpg
Zuerst gibt es das Widget wie im linken Bild, dann auf das mittlere Bild ändert und entweder dort bleibt oder Änderungen an die rechten Bild nach ~ 0,5-1sek.
Leider kann ich im Code keinen Fehler sehen, oder?
Hoffentlich können Sie mir helfen, dieses Problem zu beheben;) Vielen Dank im Voraus, Grüße, Oli
Wow, ich habe das gleiche Problem; Gut zu sehen, dass es nicht nur ich ist, es ist ein schwieriges Thema zu beschreiben. Ich bekomme den Bug mit einem HTC EVO 4G, auf dem ein benutzerdefiniertes 2.2 ROM läuft, aber nicht im Emulator. Das Problem tritt auch nicht bei einem Samsung Galaxy S auf. Hat jemand da draußen eine Lösung? Ich habe mich eine Weile mit diesem Problem herumgeschlagen. – Bobby
Ich habe das gesehen, indem ich das scrollablecontacts-Widget mit den Quellen [hier] (http://code.google.com/p/scrollablecontacts/) in einem benutzerdefinierten Startprogramm getestet habe, in dem versucht wurde, das Widget für viele Kontakte hinzuzufügen. Es kann damit zu tun haben, dass der Code zu lange dauert, um den Widget-Inhalt zu laden, vielleicht das Laden in einen Dienst, der von der Widget-Klasse gestartet wurde? –