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);
}