본문 바로가기
개발/Android

앱 위젯(App Widget) - 비동기 이미지 다운로드 예제

by 가리봉맨 2021. 7. 5.
반응형

안드로이드 앱 위젯에서 AsyncTask를 이용해서 비동기로 이미지를 다운로드 받고 화면에 뿌려주는 예제다. 내가 처음부터 전부 다 만든 것은 아니고 구글링으로 찾은 아래 예제가 정상적으로 작동하지 않아 일부 코드를 수정했다.

https://blog.naver.com/cosmosjs/221299199145

 

안드로이드 스튜디오 : 홈스크린용 위젯(Widget) 만들기(3) : 기초예제와 AsyncTask의 사용

위젯을 만들고 버튼에 기능을 부여할려고 하니 어떻게 해야 할지 막연하다. 그래서 아주 기초적인 것을 해...

blog.naver.com


버튼2는 잘 작동하는데 버튼1과 버튼3이 터치해도 반응이 없었다. 그래서 두 버튼의 onclick 리스너를 설정하는 코드를 기존 void updateAppWidget() 에서 void onUpdate() 내부로 옮겼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    for (int appWidgetId : appWidgetIds) {
        updateAppWidget(context, appWidgetManager, appWidgetId);
 
        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
 
        //버튼1 클릭 : 클릭 성공 메세지 출력!
        remoteViews.setOnClickPendingIntent(R.id.button1, getPendingSelfIntent(context, ACTION_BUTTON1, PendingIntent.FLAG_CANCEL_CURRENT));
        //버튼3 클릭 : 이미지뷰에 비트맵 이미지를 교체해준다.
        remoteViews.setOnClickPendingIntent(R.id.button3, getPendingSelfIntent(context, ACTION_BUTTON3, PendingIntent.FLAG_UPDATE_CURRENT));
 
        appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
    }
}
cs


위 코드에서 호출하고 있는 getPendingSelfIntent() 메서드도 새로 작성했다.

1
2
3
4
5
protected PendingIntent getPendingSelfIntent(Context context, String action, int flag) {
    Intent intent = new Intent(context, getClass());
    intent.setAction(action);
    return PendingIntent.getBroadcast(context, 0, intent, flag);
}
cs


이렇게 수정하니 버튼1과 버튼3이 정상적으로 작동한다. 아래 스택오버플로우 게시글을 참고했다.

https://stackoverflow.com/questions/23220757/android-widget-onclick-listener-for-several-buttons

 

Android widget onclick listener for several buttons

I am trying to create a widget for my application. From my reading an android developer site your onclick listeners all need to have an Intent. But what if I just want my button to update data in the

stackoverflow.com

끝.

반응형

댓글