티스토리 뷰

생각외로 AppWidgetManager가 뭐하는 것인지를 궁금하게 생각하시는 분이 많아 이번 포스트에서 그 내용을 간단히 다뤄보기로 했습니다.

AppWidgetManager
참고자료는 아래 주소입니다.
http://developer.android.com/reference/android/appwidget/AppWidgetManager.html

SDK 레퍼런스에 보면 아래와 같이 써있습니다.

Class Overview

Updates AppWidget state; gets information about installed AppWidget providers and other AppWidget related state.

AppWidget의 상태를 업데이트함; 설치된 AppWidget provider에 대한 정보와 그 위젯과 연관된 여러가지 상태에 대한 정보를 얻을 수 있는 클래스 입니다.

간단히 생각하면 사용자가 생성할 위젯의 정보를 가지고 있다고 생각하시면 됩니다.
아래는 여러가지 상태값입니다.

ACTION_APPWIDGET_CONFIGURE : 위젯이 바탕화면에 추가되어 위젯이 configure activity를 호출할때 이벤트 보내짐

ACTION_APPWIDGET_DELETED : 위젯이 바탕화면(또는 Host)에서 삭제될때 할 이벤트 보내짐

ACTION_APPWIDGET_UPDATE : 위젯이 업데이트 되어야할때 이벤트 보내짐

EXTRA_APPWIDGET_ID : 엑티비티에 포함되어 있는 위젯의 아이디 하나를 반환 (예를들어 설정 엑티비티와 묶인 위젯)

INVALID_APPWIDGET_ID : 위젯 매니저의 표지값은 절대로 위젯의 아이디를 반환하지 않음.

일단 주로 씌이는것 위주로 설명해 봤구요, 실질적인 코드에서 AppWidgetManger가 어떻게 쓰이는지 보겠습니다.

1. 엑티비티와 같이 묶여있는 위젯의 아이디를 찾아낸다.

아래 코드는 주로 앱위젯에 configuration(설정) 엑티비티가 존재할때 쓰입니다. 즉 설정 엑티비티랑 위젯이 묶여있는 경우겠습니다.(여기서 묶여 있다는 뜻은, 위젯을 처음 시작할때, 설정창을 띄우는 위젯들이 있지요? 그걸 말하는 겁니다.)

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
    mAppWidgetId
= extras.getInt(
           
AppWidgetManager.EXTRA_APPWIDGET_ID,
           
AppWidgetManager.INVALID_APPWIDGET_ID);
}
위와 같이 쓰였을 경우, int형 변수 mAppWidgetId에 설정 엑티비티에 묶여있는 위젯의 아이디가 들어옵니다.

2. 설정 엑티비티를 마친 후 바탕화면에 추가될 위젯의 정보를 AppWidgetManager에 담을때 쓰입니다.

AppWidgetManager
appWidgetManager = AppWidgetManager.getInstance(context);
위와 같이 쓰면 엑티비티에서 설정한 여러 앱위젯의 상태를 appWidgetManager로 넘겨주게 됩니다.

3. WidgetProvider에 생성할 앱 위젯 아이디와 appWidgetManager(각종 상태)를 넘겨줍니다.

실제 바탕화면에 나타나는(또는 보여지는)모든 것은 위젯 프로바이더 클래스에서 관리합니다. 따라서 위젯 프로바이더에 자신의 상태정보를 넘겨줘야 겠습니다.

ExampleAppWidgetProvider.updateWidget(context,widgetMgr,mAppWidgetId);
위젯 프로바이더의 static 함수에 위젯 매니저와 아이디를 넘겨주는 것을 볼 수 있습니다.

4. 모든 설정이 제대로 되었으면, 설정엑티비티를 끝내기 위해 인텐트로 부터 값을 반환받습니다.

Intent
resultValue = new Intent();
resultValue
.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult
(RESULT_OK, resultValue);
finish
();

5. 위젯 업데이트에 쓰입니다.

위젯 프로바이더 클래스에서 위젯의 상태를 업데이트 하는데 쓰입니다.

appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
위 코드는 해당 위젯의 아이디와 업데이트할 rv(remoteView)를 갱신하는 역할을 합니다.

위젯 매니저에 대한 함수는 레퍼런스 문서를 확인해 주시기 바랍니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함