Мониторинг состояния подключения к Интернету через наблюдаемые объекты запускается только один раз

Я хочу иметь широкий мониторинг интернет-соединения приложения, для этой цели я использую rxjava, я создал класс util и получил статический метод для состояния соединения, например:

val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE)
            as ConnectivityManager
    val activeNetworkInfo = connectivityManager.activeNetworkInfo
    return Observable.just(activeNetworkInfo != null && activeNetworkInfo.isConnected)

после этого в каждом действии я получаю ссылку на это и подписываюсь на него следующим образом:

isInternetOn(this).retry().subscribe({
        Toast.makeText(this@MainActivity, it.toString(), Toast.LENGTH_SHORT).show()
    })

проблема в том, что когда активность открывается, тост отображает правильный статус, но когда я выключаю/включаю (изменяю статус интернет-соединения), ничего не происходит, тост не появляется

Благодарю вас!


person blackHawk    schedule 27.04.2020    source источник


Ответы (1)


Ваше решение даст только разовый ответ, для получения обновлений для изменения сети вам нужно ReactiveNetwork.

ReactiveNetwork
  .observeNetworkConnectivity(context)
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(connectivity -> {
      if(connectivity.getState() == NetworkInfo.State.DISCONNECTED) {
          Log.d(TAG,"Connection lost");
        } else if(connectivity.getState() == NetworkInfo.State.CONNECTED) {
          Log.d(TAG,"Connected");
        }
  });
person Yash Doshi    schedule 27.04.2020
comment
Спасибо @Yash, а если я не хочу использовать его сейчас? - person blackHawk; 27.04.2020
comment
просто .subscribe() @blackHawk - person bubbles; 29.04.2020