본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Timer 를 이용한 App Widget Update Example

by 돼지왕 왕돼지 2012. 2. 16.
반응형


안녕하세요 돼지왕 왕돼지입니다.
오늘은 Timer 를 이용하여 App Widget 을 Update 하는 방법에 대해 알아보겠습니다.
이 방법은 지난번에 알아본 Service 를 이용한 방법도 매우 유사합니다. 
  
2012/02/16 - [프로그래밍 놀이터/안드로이드] - [Android/안드로이드] Service 를 이용한 App Widget Update

 

왜 Timer 를 이용하여 update 하나요?

 
- Service 를 이용하는 이유와 같습니다. 위의 링크를 참조하세요~ :)

- 기본적으로 Timer 는 Timer 자체의 Thread 를 이용한다는 것을 참조하시면, 코딩하는 데 더 수월하겠습니다.



Sample Code


Service 를 이용한 방법과 마찬가지로, Idea 만을 제공하고 있습니다.

@AppWidgetProvider

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 5000, 1000);
 }

class MyTime extends TimerTask{
     RemoteViews remoteviews;
     AppWidgetManager appwidgetmanager;
     ComponentName componentname;
  
     MyTime(Context context, AppWidgetManager appWidgetManager){
         appwidgetmanager = appWidgetManager;
         remoteviews = new RemoteViews(context.getPackageName(), R.layout.main);
         componentname = new ComponentName(context, TestWidget.class);
     }
 
     @Override
     public void run() {
          remoteviews.setTextViewText( R.id.textview, (new Date(System.currentTimeMillis())).toLocaleString() );
         appwidgetmanager.updateAppWidget(componentname, remoteviews);
     }
 }
  

 

 - Widget의 view 접속은 RemoteView class 이용합니다.

    remoteviews = new RemoteViews(String packageName, int layout);

 
- Widget의 존재를 알릴 때는 ComponentName을 이용합니다.

   componentname = new ComponentName(Context pkg, String class)

 

 - remoteview를 통해서 view를 control 한 후에는 반드시 AppWidgetManager를 통해서 view의 update 소식을 알려야 합니다.

 remoteviews.setTextViewText( id, text )  
 appwidgetmanager.updateAppWidget( componentname, remoteviews ); 

 

로그인 없이 추천 가능합니다. 손가락 꾸욱~





반응형

댓글