Trying to listen to a Connection call back using Live Data. The Callbacks "onAvailable" and "onLost" are fired, but the "postValue" inside the ViewModel is not fired. It is first only once when the AppViewModel is initialized and the init is called only once. When I move the postData outside the network callbacks, it fires. Any help is appreciated.
class AppViewModel(application: Application) : AndroidViewModel(application) {
private var connectivityManager =
application.applicationContext.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
var wifiStatusListener = MutableLiveData<Boolean>()
var callback: NetworkCallback =
object : NetworkCallback() {
override fun onAvailable(network: Network) {
wifiStatusListener.postValue(true) // never calls.
logI(TAG, "onAvailable ${network.describeContents()}")
}
override fun onLost(network: Network) {
wifiStatusListener.postValue(false) // never calls.
logE(TAG, "onLost ${network.describeContents()}")
}
}
init {
logI(TAG, "View Model Initialized")
viewModelScope.launch {
initWiFiStatusCheckListener()
}
}
// called from init in ViewModel
connectivityManager.registerDefaultNetworkCallback(callback)
In Activity, this is how View model is initialized. The log below is called only once for the first time
logI(TAG, "Wifi Listener $it")
appViewModel = ViewModelProvider(this).get(AppViewModel::class.java)
appViewModel.wifiStatusListener.observe(this, Observer {
logI(TAG, "Wifi Listener $it")
})