app개발/android

[Android] Beacon에서 Dialog띄우기

pa_songsong 2022. 5. 5. 03:24

비콘을 사용하면서 Dialog를 띄우려 했는데 단순히 beaconManager의 addRangeNotifier에서 불러오려고 하면 Dialog가 띄워지지 않았습니다.

안드로이드에서 메인 스레드는 UI 스레드로써 UI작업을 담당하기 때문에 메인스레드로 장기적인 작업을 수행할 경우 ANR이 발생합니다.

그래서 스레드를 따로 만들고 UI를 업데이트하도록 요청하는 Handler를 통해 작업의 내용을 메인스레드에 보내서 UI를 업데이트합니다.(메인스레드가 아닌 다른 스레드에서는 UI를 업데이트 할 수 없기 때문입니다.).

showDialog로 바로 띄우기 실패!

beaconManager안에서 바로 호출하는 것이 아니라 쓰레드를 통해서 호출해야지 백그라운드로 동작하여 불러올 수 있었습니다.

그래서 쓰레드를 호출하는 update()함수를 만들어서 beaconManager내에서 update()를 호출하였습니다.

update()로 변경

cnt가 0일때 서버에서 값을 불러오는 함수를 호출하고,

이후에 서버에서 넘어온 값이 원하는 변수에 저장되면 showDialog()를 호출했습니다.

그리고 handler를 통해 작업값을 메인 스레드로 전달했습니다.

showDialog()는 커스텀Dialog이기에 dialog_store_info.xml을 만들어서 사용했습니다.