Android7.0之后通过ConnectivityManager.NetworkCallback来获取网络状态
获取ConnectivityManager对象
val connectivityManager: ConnectivityManager = getSystemService( Context.CONNECTIVITY_SERVICE ) as ConnectivityManager
设定网络类型NetworkRequest,这里设定了移动网络和wifi
val networkRequest: NetworkRequest = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .build()
实现如下:
connectivityManager.registerNetworkCallback(networkRequest, object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { //网络连接成功 } override fun onLost(network: Network) { //网络断开连接 } override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) { // 当前网络为移动网络 networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) // 当前网络为wifi networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) } })
下面介绍获取网络状态的方法
Android29中的方法
@RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE) fun isNetworkAvailable(): Boolean { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { val wifi = capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ?: false val cellular = capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ?: false wifi || cellular } else { isNetworkAvailable2() } }
Android 低于29的获取方法
@RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE) fun isNetworkAvailable2(): Boolean { try { val netWork = connectivityManager.activeNetworkInfo?.isConnected ?: false LotusLog.d("TAG", "Network activeNetworkInfo netWork: $netWork") return netWork } catch (e: Exception) { LotusLog.e("TAG", "isNetworkAvailable: " + e.message) } return false }
上述为基本用法仅供自己开发笔记使用!