2
我在我的应用程序中使用DefaultSharedPreferences。我想创建一个小部件,它将切换我的偏好。我完成了小部件。它正在做我想做的事情,但如果我从其他活动中更改此偏好,小部件将不会更新。小部件应该显示实际的首选项
public class WidgetReceiver extends AppWidgetProvider {
public static String ACTION_WIDGET_TOGGLE = "ActionToggle";
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_on_off);
boolean state = PreferenceManager.getDefaultSharedPreferences(context).getBoolean("serviceOn", true);
if(state)
remoteViews.setImageViewResource(R.id.widgetImage, R.drawable.ic_widget);
else
remoteViews.setImageViewResource(R.id.widgetImage, R.drawable.ic_widget_dark);
Intent intent = new Intent(context, WidgetReceiver.class);
intent.setAction(ACTION_WIDGET_TOGGLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
remoteViews.setOnClickPendingIntent(R.id.widgetImage, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if(AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
if(intent.getAction().equals(ACTION_WIDGET_TOGGLE)) {
boolean state = !PreferenceManager.getDefaultSharedPreferences(context).getBoolean("serviceOn", true);
Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
editor.putBoolean("serviceOn", state);
editor.commit();
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), WidgetReceiver.class.getName());
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
onUpdate(context, appWidgetManager, appWidgetIds);
}
super.onReceive(context, intent);
}
}
}
如何让它工作? 谢谢。
你能举个例子吗?我不知道如何从活动调用widget.onUpdate()。 – artemkaxboy 2012-07-13 18:55:32
我编辑了我的答案,看它给出的链接 – Martinsos 2012-07-16 01:13:51