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

코틀린 mvvm 브로드캐스트 리시버 질문드립니다 !!

0 추천

mvvm 패턴사용도중 네트워크 브로드캐스트 리시버에 대해 잘안풀려서 질문하러왔습니다 

 

class NetworkChangeReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        val connMgr = BaseApplication.context?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val activeNetwork: NetworkInfo? = connMgr.activeNetworkInfo
        val isConnected: Boolean? = activeNetwork?.isConnected

        if(isConnected != true) {
            Toast.makeText(context, "네트워크 꺼짐", Toast.LENGTH_SHORT).show()
        } else {
        }
    }
}

이런식으로 브로드캐스트 리시버 클래스를 만들고 매니패스트에도 재대로 등록을해놧고요 

baseApplication 에도 

private fun networkState(){
    val filter: IntentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
    val networkChangeReceiver = NetworkChangeReceiver()
    registerReceiver(networkChangeReceiver, filter)
}

로 적용해놔서 어디서든 네트워크가 없으면 저 토스트 메시지가 임시로 뜨게해놧습니다 

 

여기서 mainViewModel 에서 

private val _networkVisibility = MutableLiveData<Boolean>(!context?.applicationContext?.isNetworkAvailable!!)
val networkVisibility: LiveData<Boolean>
    get() = _networkVisibility

networkVisibility를 xml에서 바인딩하고있는데 실시간으로 변경이 되지않네요 

제가 원하는건 특정 버튼이 네트워크가 없을때 메인화면에서 나오는걸 원하고있습니다 

제생각에는 저 네트워크 브로드캐스트리시버 클래스에서 _networkvisiblilty를 바꿔주면 간단한데 

저걸 companion object 로 해서 저쪽에서 그냥 value 값을 true로 주면될줄알앗는데 안되더라고요 

이것저것 많이해본상태고 구글링도 진짜로 진짜로 많이해봣고 스택오버플로에도 질문해봣는데 답변이안와서 여기에도 도움을 구하고자 올립니다 . 

제가원하는건 단하나 메인뷰모델에 있는 어떤 boolean 값을 true 로 보여주고싶습니다 

아시는분은 지식을 나누어주시면 감사하겟습니다 

익명사용자 님이 2020년 3월 13일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...