0

我想监控应用程序范围的互联网连接,为此我使用 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()
    })

问题是当活动打开时吐司显示正确的状态但是当我关闭/打开(更改互联网连接状态)时没有任何反应没有吐司出现

谢谢!

4

1 回答 1

1

您的解决方案只会给出一次性答案,要接收 Network Change 的更新,您应该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");
        }
  });
于 2020-04-27T06:18:20.143 回答