티스토리 뷰
프로그래밍/Android
[Dev Guide] Framework Topics > App Widgets : Creating an App Widget Configuration Activity
앙망 2011. 8. 16. 11:20App Widgets
사용자가 새로운 앱 위젯을 추가할 때 세팅을 구성하게 하려면, 앱 위젯 구성 액티비티를 생성한다. 이 액티비티는 자동으로 앱 위젯 호스트에 의해 실행되고 사용자가 앱 위젯의 생성 시점에 가능한 세팅-앱 위젯 색상, 크기, 업데이트 기간 등-을 구성할 수 있도록 한다.
이 구성 액티비티는 보통 액티비티처럼 메니페이스 파일에 선언되어야 한다. 그러나 앱 위젯 호스트가 ACTION_APPWIDGET_CONFIGURE 액션으로 호출되기 때문에 이 인텐트를 받아들이도록 한다.
<activity android:name=".ExampleAppWidgetConfigure">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
또한 이 액티비티는 AppWidgetProviderInfo XML 파일의 android:configure 속성에 선언되어야 한다.
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigure"
... >
</appwidget-provider>
※ 이 액티비티는 전체 이름으로 선언해야 한다. 왜냐하면 패키지 영역 밖에서 참조될 수 있기 때문이다.
실제 액티비티를 구현할 때 기억해야 할 중요한 것 2가지
- 앱 위젯 호스트는 구성 액티비티를 호출하고, 구성 액티비티는 결과를 돌려줘야 한다. 결과는 앱 위젯 ID를 포함해야 한다.
- 앱 위젯이 생성될 때 onUpdate() 메소드는 호출되지 않을 것이다. (시스템은 구성 액티비티가 실행될 때 ACTION_APPWIDGET_UPDATE 브로드캐스트를 보내지 않는다. ) 앱 위젯이 처음 생성될 때, 앱 위젯 매니저에게서 업데이트를 요청하는 것은 구성 액티비티의 책임이다. 그러나 첫번째만 건너띌 뿐 이어지는 업데이트에서는 onUpdate()가 호출된다.
Updating the App Widget from the configuration Activity
앱 위젯이 구성 액티비티를 사용할 때, 구성이 완료될 때 앱 위젯을 업데이트하는 것은 이 액티비티의 책임이다. AppWidgetManager로부터 직접 업데이트를 요청해서 구현할 수 있다.
요약 : 앱 위젯 업데이트와 구성 액티비티 닫기
- 액티비티를 실행한 인텐트에서 앱 위젯 얻기
Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
- 앱 위젯 구성 실행하기
- 구성이 완료될 때, getInstance(Context)를 호출해서 AppWidgetManager 의 인스턴스 얻기
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- updateAppWidget(int, RemoteViews) 를 호출해서 RemoteView 레이아웃으로 앱 위젯 업데이트하기
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(mAppWidgetId, views);
- 반환 인텐트를 생성해서 액티비티의 결과를 세팅하고 액티비티 종료하기
Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish();
Tip : 구성 액티비티가 처음 시작할 때, 액티비티의 결과를 RESULT_CANCELED로 설정한다. 이 방법은 사용자가 마지막에 도달하기 전에 나갔을 때, 앱 위젯 호스트가 앱 위젯이 추가되지 않고 구성이 취소되었다는 것을 알게한다.
[Dev Guide] Framework Topics > App Widgets 글 목록
댓글