마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

현재 액티비티의 context구하기.

0 추천
안녕하세요.

브로드캐스트 리시버로, 특정 액션이 감지 될 때 제가 만든 다이얼로그를

띄워주고싶습니다.

(main에서 브로드캐스트 리시버를 등록)

현재 액티비티가 여러개인데, main-sub1,2,3,4...등

main뿐만이 아니라sub1,2,3,4 등등 이동했을 때에도 리시버로 감지될 경우

현재 액티비티 위에 다이얼로그를 띄워주고싶습니다.

[언제 액션이 감지될지 모르니, 어느 액티비티에 팝업될지 고정할 수 없습니다]

토스트의 context와 다르게 다이얼로그에 사용해야할 context는 어떤식으로 구해야할지 모르겠습니다...

조언 부탁드립니다.
ㅇㅇ 님이 2017년 12월 4일 질문

1개의 답변

0 추천
 
채택된 답변

BroadcastReceiver에서 직접 dialog를 띄우는 것은 좋지 않은 설계로 생각됩니다. 이벤트 정보를 Activity로 넘겨주고 Activity쪽에서 처리를 하는게 좋은 구조라고 생각됩니다. BroadCast의 메세지는 오히려 PushMessage의 형태로 보여주는게 더 좋을 것 같습니다.

 

 
minor (13,710 포인트) 님이 2017년 12월 4일 답변
답변 감사합니다. 브로드캐스트 리시버를 사용했던 이유는
ACTION_USB_DEVICE_DETACHED 액션을 감지해서 해지되었다는 다이얼로그를 띄워주려는 것이었습니다. 이 경우, 언제 어느 액티비티에서 detached가 될지 몰라서요. 이벤트 정보를 현재 띄워진 액티비티로 보낼 수 있는 것인가요?
implicit receiver를 사용하기 보다는 조금 번거롭겠지만 explicit receiver를 Acitivty에서 register/unregister 하는 것이 설계상 맞습니다. 조금 팁을 드리자면 abstract Activity를 생성한 후 onResume()과 onPause()에서 register/unregister를 하고 이벤트에 대한 처리를 한 후, 해당 모든 Activity들을 해당 abstract Activity로 상속하는 방법이 있습니다.
면밀히 보면 이런 번거로운 과정을 거치기보다는 Toast나 PushMessage를 사용하는 것이 상황상 적절해보입니다.
친절한 답변 감사드립니다 ㅠㅠ
확실히, 다른 작업 도중 브로드캐스트 리시버로 액션을 감지했을 때 위에 다이얼로그가 뜨면 불편함이 있겠네요..다른 앱들이나 예제를 보면 말씀해주신대로 대부분 토스트나 푸시메시지로 간단히 알리는 정도니..이쪽으로 알려주는 걸로 고려해봐야겠네요. 다시한 번 감사드립니다.
...