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);
}
}
}
어떻게 작동합니까? 감사합니다. .
예를 들어 주시겠습니까? activity에서 widget.onUpdate()를 호출하는 방법을 모르겠습니다. – artemkaxboy
내 대답을 편집했습니다. 주어진 링크를 참조하십시오. – Martinsos