Mam problem podczas aktualizowania widgetu ręcznie za pomocą AppWidgetManager.updateAppWidget. Platforma to Android 2.2.Widżet sterowania zasilaniem pokazany na krótką chwilę podczas aktualizowania mojego własnego widgetu za pomocą AppWidgetManager, na czym polega problem?
Oto kod:
oświadczyłem widget dodatkowo do istniejącej działalności w manifeście:
<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>
Widget klasy został ogłoszony w 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();
}
}
}
W istniejącym działaniu dodałem kilka linii, aby ręcznie zaktualizować widżet:
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);
Ale teraz mam tego błędu: Jeśli widget jest włączony, pokazuje widget ustawień energii na krótki okres (~ 0,5sec-1sec), zanim pojawi się żądany widget.
Oto zrzut ekranu z tym problemem (kolejność od lewej do prawej): http://i.stack.imgur.com/rHkjw.jpg
pierwsze istnieje widżet jak na lewym zdjęciu, a następnie zmienia się na środku obrazu i albo pozostaje tam lub zmiany w prawym obrazie ~ 0,5-1 sek.
Niestety nie widzę żadnego błędu w kodzie, prawda?
Mam nadzieję, że może mi pomóc rozwiązać ten problem;) góry dzięki, pozdrowienia, Oli
Wow, mam ten sam problem; dobrze widzieć, że to nie tylko ja, to trudny problem do opisania. Dostaję błąd w HTC EVO 4G z niestandardową 2.2 ROM, ale nie w emulatorze. Problem ten nie zdarza się również w przypadku Samsung Galaxy S. Każdy ma rozwiązanie? Zmagałem się z tym przez jakiś czas. – Bobby
Widziałem to przez testowanie widgetu scrollablecontacts-widget, w którym źródłem jest [tutaj] (http://code.google.com/p/scrollablecontacts/) w niestandardowym programie uruchamiającym, który próbuje dodać widżet do wielu kontaktów. Może to być związane z zbyt długim ładowaniem kodu, aby załadować zawartość widżetu, może zrobić ładowanie w usłudze uruchomionej z klasy widgetów? –