
ググると公式リファレンスが見つかる。
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
しかし、このコードはAPI29で非推奨。
Note: getActiveNetworkInfo() was deprecated in Android 10. Use NetworkCallbacks instead for apps that target Android 10 (API level 29) and higher.
Monitor connectivity status and connection metering 
Android 10 で通信状態の変更を監視するには、 ConnectivityManager.registerNetworkCallback() を使いましょう。
Android 10 時代の Connectivity Monitoring - takasfz blog 
- コールバックの登録/解除のタイミングはライフサイクルに依存する。
- コールバック onAvailable()/onLost() は、非メインスレッド上で受信。
よって、MVVM上で使うとなると、LiveData化するのが良さげ。
class ConnectivityLiveData @VisibleForTesting internal constructor(private val connectivityManager: ConnectivityManager)
: LiveData<Boolean>() {
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
constructor(application: Application) : this(application.getSystemService(Context.CONNECTIVITY_SERVICE)
as ConnectivityManager)
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network?) {
postValue(true)
}
override fun onLost(network: Network?) {
postValue(false)
}
}
override fun onActive() {
super.onActive()
val activeNetwork: NetworkInfo? = connectivityManager.activeNetworkInfo
postValue(activeNetwork?.isConnectedOrConnecting == true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
connectivityManager.registerDefaultNetworkCallback(networkCallback)
} else {
val builder = NetworkRequest.Builder()
connectivityManager.registerNetworkCallback(builder.build(), networkCallback)
}
}
override fun onInactive() {
super.onInactive()
connectivityManager.unregisterNetworkCallback(networkCallback)
}
}
ConnectivityLiveData - AndroidPub 
まとめ
ただ「ネットが使える/使えない」を判定させるだけの実装がここまでややこしいSDKてのは問題じゃねえか?!
みんな混乱してるようにみえるけども。
もっといい感じがあれば教えてね!