이 블로그 검색

2012년 7월 4일 수요일

AppWidget 에서 onReceive, onUpdate

AppWidget에서 onReceive()와 onUpdate()가 있는데,
둘을 다 쓰면 onRecive 가 먼저 호출된다.
따라서 onReceive 에 onUpdate 를 호출하는 코드를 넣지 않으면,
onUpdate를 호출할 수 없다. 그러면 onUpdate 에 있는 코드들이 전혀 실행이 안된다..ㅡㅡ;

따라서 브로드캐스팅을 할 필요가 있어서 onReceive 를 사용하게 되면, 반드시
onUpdate를 호출해주어야 한다.



@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for(int cnt = 0; cnt < appWidgetIds.length; cnt++) {
int appWidgetId = appWidgetIds[cnt];

// String packageNm="com.hanaskcard.android.widgetapp.lgt.hanaskcard";  // 연동할 앱의 팩키지 네임을 넣어준다.
String packageNm="my.test";  // 연동할 앱의 팩키지 네임을 넣어준다.
Log.d("HanaSK", "온 업데이트 실행 ~~~!!!");

            Intent intentCard = context.getPackageManager().getLaunchIntentForPackage(packageNm);  // 타 앱으로 연동.
            PendingIntent pendingIntentCard = PendingIntent.getActivity(context, 0, intentCard, 0);
           
            Intent intentSetting = new Intent(context, SettingMainActivity.class);
            PendingIntent pendingIntentSetting = PendingIntent.getActivity(context, 0, intentSetting, 0);
           
            Intent intentRefresh = new Intent(ACTION_REFRESH);
            PendingIntent pendingIntentRefresh = PendingIntent.getBroadcast(context, appWidgetId, intentRefresh, 0);

            mViews = new RemoteViews(context.getPackageName(), R.layout.hana_m_card_appwidget);
            mViews.setOnClickPendingIntent(R.id.img_maincard, pendingIntentCard);
            mViews.setOnClickPendingIntent(R.id.btn_setting, pendingIntentSetting);
            mViews.setOnClickPendingIntent(R.id.img_refresh, pendingIntentRefresh);
            appWidgetManager.updateAppWidget(appWidgetId, mViews);
           
            refreshWidget();  // 리프레쉬 버튼은 누르지 않았을 때 - 자동 Update 시에도 새 카드 이미지를 가져와야 함.
           
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}

@Override
public void onReceive(Context context, Intent intent){
String action = intent.getAction();

if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
        int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
        if (appWidgetIds != null && appWidgetIds.length > 0) {
            this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
        }
    }
}

if(action.equals(HanaMCardWidgetProvider.ACTION_REFRESH)){
refreshWidget();
}

}

public void refreshWidget(){
Log.d( TAG, "Widget Refresh" );
// AID를 새로 가져와 - getMainCardNumber(),  카드 이미지를 셋팅- setMainCardImg()하는 로직을 넣음.
  //  mViews.setImageViewResource(R.id.imageView1, mainCardImg);
}

댓글 1개:

  1. super.onReceive(context, intent); 이게 빠진 듯 합니다.

    답글삭제