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 urllib.parse.quote()

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

음악 총보(Score), 파트보(Part)

KiCad 시작하기 3 (새로운 소자 추가하기)

Android Kotlin short-circuit evaluation

KiCad 시작하기 1 (회로도 만들기)

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

Kivy 시작하기 12 (Pyinstaller로 exe 파일 만들기)

Android Compose automation for getting localized images to use on Play Store app image

딩기 요트 명칭