Android Make a Widget with Button events

사용 언어: Kotlin 1.4.30
사용 버전: Android Studio 4.1.2

안드로이드 Make a Widget with Button events를 해보겠습니다.


저번 시간에는 버튼을 넣기만 하고 클릭 이벤트를 추가하지 않았습니다. 이번에는 클릭 이벤트를 추가해보도록 하겠습니다.




버튼을 하나 더 추가해 줍니다.


my_app_widget.xml로 갑니다.







이렇게 만들었습니다.




버튼 이벤트로 할 수 있는 것은 두 가지 정도 있습니다.

하나는 Broadcast를 보내는 것과 다른 하나는 PendingIntent를 불러오는 것입니다.

Widget receiver가 받는 Broadcast를 보내면 Widget의 정보를 업데이트할 수 있고, PendingIntent는 앱의 특정 화면이 열리게 만들 수 있습니다.


이번 시간에는 버튼 1을 누르면 Morning이라는 글자가 'Clicked!'으로 변경되는 것과 버튼 2를 누르면 앱이 열리도록 만들겠습니다.




MyAppWidget.kt 파일로 갑니다.

Widget의 경우 일반 Layout처럼 findViewbyId로 버튼을 찾을 수 없습니다. 이유는 RemoteViews를 사용하기 때문입니다.



버튼 1 이벤트부터 추가해보겠습니다.


MyAppWidget에 companion object를 추가합니다.

BUTTON1_CLICK과 REQUEST_CODE_WIDGET을 추가합니다.

BUTTON1_CLICK은 버튼이 클릭 됐을 때 어떤 버튼인지 구분하기 위해 필요한 것이고, REQUEST_CODE_WIDGET은 PendingIntet를 만들 때 필요합니다.

REQUEST_CODE_WIDGET_LAUNCH_ACTIVITY는 LaunchActivity PendingIntent를 만들 때 필요합니다.







MyAppWidget 안에 getPendingSelfIntent 함수를 만듭니다.








updateAppWidget 함수로 가서 setOnClickPendingIntent를 사용하여 다음과 같이 버튼 1에 클릭 이벤트를 설정합니다.








MyAppWidget에 onReceive를 override 합니다.

다음과 같이 정의합니다.




intent?.action에서 BUTTON1_CLICK 이면 Widget의 leftText를 setTextViewText를 사용하여 Clicked!로 변경하도록 만들었습니다.

그리고, appWidgetManager.updateAppWidget()을 사용하여 Widget의 변경 사항이 반영되도록 만들었습니다.



실행해 봅시다.

버튼을 누르면 Clicked!로 변경된 것을 확인할 수 있습니다.







버튼 2의 기능을 넣어봅시다.


updateAppWidget에 button2Intent를 만듭니다.

그리고 PendingIntent를 만들고 setOnClickPendingIntent를 사용합니다.







실행해 봅시다.






버튼 2를 누르자 앱이 실행되는 것을 확인할 수 있습니다.


끝.



카테고리: Android




댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)