제가 윗젯을 만들었는데요.
update되는 주기를 설정하지 않고
어플에서 특정 조작을 할때만 위젯을 update해주려고 하거든요...
근데 어떻게 명시적으로 호출을 해줘야 할지 감이 안잡히네요..
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
Widget a = new Widget();
a.onUpdate(getApplicationContext(), manager, manager.getAppWidgetIds(getComponentName()));
이런식으로 해봤는데, onUpdate는 호출이 되는데,
이거 위젯에 반영이 되질 않더라구요...
어떤식으로 해야할지 도움 좀 주시면 감사하겠습니다.
먼저 특정 조작할 때 이벤트를 걸어주시구요. PendingIntent에 넣어서 getBroadcast를 이용해서 onReceive로 전달하면 되겠네요.
그럼 onReceive에서 action값으로 구분하시구요 그 부분에 위에 소스를 넣으시면 됩니다.
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
manager.updateAppWidget(위젯ID, 리모트뷰); => 해당 위젯ID만 업데이트 할 때
manager.updateAppWidget(위젯ID배열, 리모트뷰); => 위젯 배열에 담긴 위젯을 모두 업데이트 할 때
manager.updateAppWidget(컴포넌트네임, 리모트뷰); => 해당 컴포넌트이름을 가진 위젯을 업데이트 할 때
그리고 onUpdate 함수에서 직접 위젯을 업데이트 하지 마시구요
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
위젯업데이트함수(context, appWidgetManager, appWidgetIds[i]);
}
}
이런식으로 만들고 onReceive에서는 위젯업데이트 함수를 호출해 주세요.




브로드캐스트로 ACTION_APPWIDGET_UPDATE 액션이 들어오면 onUpdate가 호출되는걸로 알고있습니다..
onUpdate가 호출되어야 할 시점에서 브로드캐스트로 위 액션을 보내보세요..