티스토리 뷰


아이폰과 안드로이드의 가장 큰 차이점이라 할 수 있는 위젯은 실제 컨트롤 하기에는 예제도 많이 부족하고, 매우 제한적인 요소만 사용 가능하기 때문에....

저같은 초보 개발자는 매우 많은 삽질(?)을 거치게 될 수도 있습니다...... (어흑 ㅠ_ㅠ)

무작정 만드는 것보단 어느정도 이론적인 면을 알고 가야 하므로, 이번 포스트에서는 중요한 구글 개발자 사이트에서 제공하는 AppWidget에 대한 가이드라인에서 중요한 부분을 살표보겠습니다.

(아래 주소 가면 상세한 설명이 나와 있으나, 영문인 관계로 영어좀 하시면 가서 읽어보시면 많은 도움이 됨.)
http://developer.android.com/guide/topics/appwidgets/index.html 

먼저 간략하게 본문 내용 중에서 중요한 구문을 살펴보면

The most important AppWidgetProvider callback is onUpdate() because it is called when each App Widget is added to a host (unless you use a configuration Activity).  

가장 중요하고 중요하고 매우 많이 중요한 AppWidgetProvider callback은 onUpdate() 함수이다. 왜냐하면, 이 함수는 각각의 위젯들이 추가될때 호출되기 때문이다.

저의 생각 : 쉽게 생각해서 바탕화면에 위젯 추가된 후 위젯이 갱신될때 호출된다는 뜻(?) 인듯 함. 즉, 무조건 위젯 추가하면 한번은 호출된다 라고 생각하심이....(왜냐하면, 처음 추가하고 위젯 업데이트 메시지가 날라가므로)

If your App Widget accepts any user interaction events, then you need to register the event handlers in this callback.

만약에 사용자와 상호작용하는 이벤트가 필요하다면, 이벤트에 대한 핸들러를 onUpdate() 함수에 등록해줄 필요가 있다. 

저의 생각 : 예를 들어, 위젯에 버튼이 있다고 칩시다. 이 버튼을 누르면 배경을 바뀌게 하는 이벤트를 만들고 싶다면, 버튼이 눌렀을때 어떤 일을 해야할지를 바로 onUpdate()함수에 등록해야 한다는 겁니다.

If your App Widget doesn't create temporary files or databases, or perform other work that requires clean-up, then onUpdate() may be the only callback method you need to define.
AppWidget이 임시 파일을 만들거나, 데이터베이스를 만들거나, clean-up을 필요로 하는 일을 수행하지 않는 이상, onUpdate()함수는 당신이 정의를 해야 하는 유일한 callback 함수일 것이다.

저의 생각 : 위젯 프로바이더에서 데이터베이스를 열거나 임시 파일을 열기위해서는 onEnabled() 함수에서 선언하고 onDisabled() 함수에서 삭제합니다. 즉, 위젯이 파일접근이나 기타 다른일을 하지 않는다면, 모든 버튼이나 뷰에 대한 이벤트는 onUpdate함수에 등록되어야 한다는 뜻으로 생각됩니다.

 For example, if you want an App Widget with a button that launches an Activity when clicked, you could use the following implementation of AppWidgetProvider:
예를 들어, 버튼이 눌렸을때 Activity가 실행되도록 하려면 다음과 같이 하라네요.


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];

           
//인텐드와 엑티비티를 연결한다.
            Intent intent = new Intent(context, ExampleActivity.class);
            PendingIntent
pendingIntent = PendingIntent.getActivity(context, 0, intent, 0
);

           
// 버튼이 눌린 후 실행할 엑티비티를 인텐드에 결합한다.
            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);
       
}
   
}
}

자...보이시나요? 위젯에서 버튼설정방법.

위의 경우는 버튼에 setOnClickPendingIntent 를 통하여 버튼이 눌렸을 때 어떤 이벤트를 날릴 것인지 설정하고 있네요.

그 이벤트는 pendingIntent 이구요. pendingIntent는 ExampleActivity.class 를 실행하도록 하고 있네요.
즉 버튼이 눌리면 Activity가 열리도록 하고 있는 것을 볼 수 있네요.

별 내용은 없지만 기초적인 부분이라 올렸습니다.
다음 포스트에는 본격적으로 AppWidget 실습을 해보도록 하겠습니다.

틀린부분 있으면 댓글도 좀 달아주시고, 해주시면 감사하겠습니다.





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함