2020/03/09 - [Android/Widget] - 안드로이드 위젯 개발하기 (1)

2020/03/10 - [Android/Widget] - 안드로이드 위젯 개발하기 (2)

2020/03/13 - [Android/Widget] - 안드로이드 위젯 개발하기 (3)

 

누군가가 내가 만든 앱에 View 를 만들고 제멋대로 동작하게 만들어 놓았다고 생각해본다면, 매우 짜증나는 일일 것입니다.

위젯이란 것도 결국 내가 남의 앱위에 View 를 만들고 동작하도록 만드는 것이기 때문에, 위젯을 만들어 사용하는데는 매우 제한적인 방법을 사용해야 합니다.

 

단순히 TextView 의 Text 를 수정하는 것도 아래와 같이 별도의 API 를 사용해야 합니다.

        val remoteViews = RemoteViews(
            "com.tistory.develop_branch.widget",
            R.layout.widget_layout
        )
        remoteViews.setTextViewText(R.id.widget_text, "setTextViewText")

 

안드로이드 위젯의 경우, 사용할 수 있는 View 의 종류도 정해져 있습니다.

처음 위젯을 개발할 때, 가장 쉽게 부딪히는 오류가 이런 View 를 사용하지 않아서 입니다. 상속한 View 조차 사용하면 안됩니다.

위젯에서 사용할 수 있는 View 의 종류는 여기를 확인하세요.

 

이런 제약사항들은 RemoteView 에 대한 문서를 읽어보면, 좀 더 자세히 알 수 있습니다.

 

이 제약사항들 중 아마도 가장 중요한 것은 setOnClickPendingIntent 일 것입니다.

여기서 PendingIntent 에 대한 개발자 문서도 한 번 읽어보고 넘어가는 것이 좋습니다.

 

A PendingIntent itself is simply a reference to a token maintained by the system describing the original data used to retrieve it. This means that, even if its owning application's process is killed, the PendingIntent itself will remain usable from other processes that have been given it. If the creating application later re-retrieves the same kind of PendingIntent (same operation, same Intent action, data, categories, and components, and same flags), it will receive a PendingIntent representing the same token if that is still valid, and can thus call cancel() to remove it.

 

PendingIntent 는 시스템에 의해 유지되는 레퍼런스 토큰이라는 말이 나옵니다.

같은 intent action, data, category, component, flag 를 가지고 있다면 같은 PendingIntent 를 사용하게 된다는 의미로, PendingIntent를 생성할 때 사용하는 Intent 에 다른 Extra 값을 지정한다고 해서 다른 PendingIntent 가 생성되지는 않습니다.

그래서, widget Click 시 다른 동작을 지정하고자 할 때는 Extra 값이 아닌, Action 혹은 Data 를 변경해야 합니다.

이를 테면, 보통 A 라는 Activity 를 실행하기 위해 putExtra("extra",1), putExtra("extra",2) 로 구분해서 사용했다고 해서, PendingIntent 에 동일하게 적용하면 낭패를 보기 쉽습니다.

만약, PendingIntent 적용하고자 한다면, extra 값이 아닌, action = "com.tistory.develop_branch.widget.1", action = "com.tistory.develop_branch.widget.2" 와 같이 action 을 변경해서 사용해야 합니다.

 

 

2020/03/09 - [Android/Widget] - 안드로이드 위젯 개발하기 (1)

2020/03/10 - [Android/Widget] - 안드로이드 위젯 개발하기 (2)

2020/03/13 - [Android/Widget] - 안드로이드 위젯 개발하기 (3)

'Android Widget' 카테고리의 다른 글

안드로이드 위젯 개발하기 (3)  (0) 2020.03.13
안드로이드 위젯 개발하기 (2)  (0) 2020.03.10
안드로이드 위젯 개발하기 (1)  (0) 2020.03.09