티스토리 뷰
프로그래밍/Android
[Dev Guide] Framework Topics > App Widgets : AppWidgetProvider 클래스 사용하기
앙망 2011. 8. 12. 16:42AppWidgetProvider 클래스는 BroadcastReceiver 를 상속받아서 앱 위젯 브로드캐스트를 처리할수 있는 편리한 클래스이다.
onUpdate()
AppWidgetProviderInfo 에서 updatePeriodMillis 속성에 정의한 간격대로 앱 위젯을 업데이트하기도록 호출한다. 이 메소드는 사용자가 앱 위젯을 추가할 때 호출되서, 필수적인 셋업이 호출된다. 그러나 만약 구성 액티비티가 선언된다면, 사용자가 앱 위젯을 추가할 때 이 메소드를 호출되지 않고 다음의 업데이트에서 호출된다. 구성을 마칠 때 첫번째 업데이트가 실행되는것은 구성 액티비티의 책임이다.onDeleted(Context, int[])
앱 위젯은 호스트에서 삭제될때마다 호출된다.onEnabled(Context)
인스턴스 앱 위젯이 첫번째 생성될 때 호출된다.
예를 들어, 사용자가 두개의 앱 위젯 인스턴스를 추가한다면, 이것은 오직 한 번만 호출된다. 만약 새로운 데이타베이스를 열거나 다른 설정을 실행할 필요가 있다면, 모든 앱 위젯 인스턴스를 위해 발생하도록 할 필요가 있을 때 적절한 위치이다.onDisabled(Context)
이것은 앱 위젯의 마지막 인스턴스가 호스트에서 삭제될 때 호출된다. 여기서 onEnabled(Context)에서 했던 임시 데이타베이스 같은 것들을 정리한다.onReceive(Context, Intent)
이것은 모든 브로드캐스트에 대해 앞에서 나온 콜백 메소드 전에 호출된다. 보통 이 메소드를 구현할 필요는 없다. 왜냐하면 기본적인 AppWidgetProvider 구현은 모든 앱 위젯 브로드캐스트를 필터하고 위에 있는 메소드에서 적당한 것을 호출한다.
onUpdate()
onUpdate() 은 각각의 앱 위젯인 호스트에 추가될 때 호출되기 때문에 AppWidgetProvider 의 가장 중요한 콜백 메소드이다. 앱 위젯이 어떤 사용자의 상호작용 이벤트를 받았다면, 이 콜백안에서 이벤트 핸들러에 등록해야 한다. 앱 위젯인 임사 파일이나 데이타 베이스를 생성하지 않았거나, 다른 정리작업을 행한다면, onUpdate() 를 사용한다. 예를 들어 앱 위젯에 있는 버튼을 클릭할 때 액티비티를 실행하길 원한다면, AppWidgetProvider의 아래 구현을 사용한다.
public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(context, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
소스 분석
- 액티비티를 실행하는 PendingIntent 정의
- 버튼에 setOnClickPendingIntent(int, PendingIntent) 를 단다
루프를 사용하여 앱 위젯의 모든 인스턴스(appWidgetIds) 에 적용한다.
[Dev Guide] Framework Topics > App Widgets 글 목록
댓글