Android监听网络变化

参考Android 网络管家ConnectivityManager

android 7.0 之后 对于监听网络变化的广播*** CONNECTIVITY_ACTION***。

如果是在应用AndroidManifest文件中声明对该广播的监听,则无效;
如果使用register声明对该广播的监听,则有效。

所以我们应该使用更通用的方式(requestNetwork)来监听网络的变化。

步骤

1.声明权限

    
    
    
    

2.监听网络

        val cm = app.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
        val builder = NetworkRequest.Builder()
        val request = builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                .build()

        cm.requestNetwork(request,object :ConnectivityManager.NetworkCallback(){
            override fun onAvailable(network: Network?) {
                super.onAvailable(network)
                NetPublishSubject.instance().post(NetPublishSubject.CONNECTION)
                Log.i("net detect","onAvailable")
            }

            override fun onLost(network: Network?) {
                super.onLost(network)
                NetPublishSubject.instance().post(NetPublishSubject.DIS_CONNECTION)
                Log.i("net detect","onUnavailable")
            }
        })

你可能感兴趣的:(Android监听网络变化)