如何知道设备何时连接到 WiFi/Mobile/Internet?

How know when a device is connecting to WiFi/Mobile/Internet?

我有一个按钮需要从后端服务器获取一些数据。当设备未连接到 WiFi/Mobile/Internet 时,该按钮被禁用。问题是按下 WiFi 按钮时需要一些时间才能真正连接(2-3 秒)。如何知道设备何时连接以便我可以在那段时间显示 ProgressBar?谢谢

fun isInternetOncheck(context: Context): Boolean {
            val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val networkInfo = cm.activeNetworkInfo
            return networkInfo != null && networkInfo.isConnectedOrConnecting
        }
if (!NetworkCaller.isInternetOncheck(context!!)) {
     println("no internet connection")

} else {

     fetchDataFromServer()
 }
fetchDataFromServer(){
    showProgressbar()
    ......
    ......
    //code for fetching data
    ......
    ......
    hideProgressbar()
}

THIS SO question. In short you should use BroadcastReceiver with IntentFilter with ConnectivityManager.CONNECTIVITY_ACTION action. Check out NetworkInfo.State DOC 中的大量方法并选择适合报告的方法(创建自己的具有所需回调的侦听器)

如果你只负担得起 then you can use NetworkCallback, in DOC你可以看到所有的方法,使用appriopiate。但我怀疑由于 Android 碎片,更好的方法是第一个提到的。

还请记住,由于 Android N 此广播在清单中声明时不会触发,请使用 Java 示例并(取消)注册 Activity 生命周期