Before 2022/Android

Activity 변경 내용 위젯에 바로 적용하기

Eljoe 2018. 8. 29. 17:54
updatePeriodMillis에 시간만큼 업데이트되지만... 액티비티에서 수정한 내용을 바로 위젯에서 적용시키고 싶을 때, onReceive를 이용하면 된다
 // 액티비티 이벤트
    Intent widgetIntent = new Intent(this, SmartIdWidget.class);    
    widgetIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); // 위젯 업데이트 액션    
    this.sendBroadcast(widgetIntent); // 브로드캐스팅    
widget
    
    private RemoteViews views;    
          
    // 위젯 업데이트 메소드    
     public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {    
         ComponentName myWidget = new ComponentName(context, AppWidgetProvider.class);    
         AppWidgetManager manager = AppWidgetManager.getInstance(context);    
          
         if(!TextUtils.isEmpty(SharedUtil.getString(context, "kor"))){    
            remoteViews.setTextViewText(R.id.tv_kor_name, SharedUtil.getString(context, "kor"));    
         }    
          
         if(!TextUtils.isEmpty(SharedUtil.getString(context, "eng"))){    
            remoteViews.setTextViewText(R.id.tv_eng_name, SharedUtil.getString(context, "eng"));    
         }    
          
         remoteViews.setOnClickPendingIntent(R.id.btn_go_to_work, workStateClick(context, "1"));    
         remoteViews.setOnClickPendingIntent(R.id.btn_get_off_work, workStateClick(context, "2"));    
          
         manager.updateAppWidget(myWidget, remoteViews);    
       }    
          
    @Override    
       public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {    
         views = new RemoteViews(context.getPackageName(), R.layout.smart_id_widget);    
          
         pushWidgetUpdate(context, views);    
    }    
             
    @Override    
       public void onReceive(Context context, Intent intent) {    
         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);    
         ComponentName myWidget = new ComponentName(context.getPackageName(), SmartIdWidget.class.getName());    
          
         int[] widgetIds = appWidgetManager.getAppWidgetIds(myWidget);    
          
         String action = intent.getAction();    
          
          //업데이트 액션이 들어오면    
         if(action.equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)){     
            if(widgetIds != null && widgetIds.length > 0){    
              this.onUpdate(context, AppWidgetManager.getInstance(context), widgetIds); // onUpdate 호출    
            }    
         }    
       }