高版本網(wǎng)絡(luò)監(jiān)聽方案更新

最近在更新之前的一些java代碼到kotlin去,然后把原來的NetReciever更新為kotlin版本,然后as給了我以下的錯誤:

image.png
image.png

wtf?這是什么情況,仔細(xì)把提示的文字閱讀一遍。。。

image.png

原來CONNECTIVITY_ACTION已經(jīng)過時(shí),這里官方推薦使用 requestNetwork,registerNetworkCallbackor registerDefaultNetworkCallback來替換原有的BroadcastReciever方案,既然如此,就嘗試來改造一番。

首先根據(jù)不同的版本區(qū)分不同的監(jiān)聽方案

主方法

//網(wǎng)絡(luò)變化監(jiān)聽器
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    mConnectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkCallbackImpl = NetworkCallbackImpl()
    mConnectivityManager.requestNetwork(NetworkRequest.Builder().build(),networkCallbackImpl)
}else{
    networkReceiver =  NetWorkReciever()
    val netFilter = IntentFilter()
    netFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)
    registerReceiver(networkReceiver,netFilter)

}

NetworkCallbackImpl

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
class NetworkCallbackImpl: ConnectivityManager.NetworkCallback() {


    val TAG = "NetworkCallbackImpl"

    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        Log.i(TAG,"網(wǎng)絡(luò)已鏈接")
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        Log.i(TAG,"網(wǎng)絡(luò)已斷開")
    }


    override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities)
        if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
            when {
                //WIFFI
                networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
                    Log.i(TAG,"wifi已經(jīng)連接")
                }
                //數(shù)據(jù)流量
                networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
                    Log.i(TAG,"數(shù)據(jù)流量已經(jīng)連接")
                }
                else -> {
                    Log.i(TAG,"其他網(wǎng)絡(luò)")
                }
            }
        }

    }
}

然后補(bǔ)充一下原來NetWorkReciever的代碼

class NetWorkReciever:BroadcastReceiver() {

    companion object{
        const val TAG = "NetWork"
    }

    override fun onReceive(context: Context?, intent: Intent?) {
        if(ConnectivityManager.CONNECTIVITY_ACTION==intent?.action){

            //網(wǎng)絡(luò)改變
            Log.i(TAG,"NETWORK_CHANGE")
            val connectivityManager =
                context?.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
            val info = connectivityManager.activeNetworkInfo
            if (info != null && info.isConnected) {
                val type = info.type
                Log.i(TAG,"network isconnected ,type is $type")
            } else {
                Log.i(TAG,"network disconnected ,type is -1")
            }
        }
    }
}

這里要添加兩個(gè)權(quán)限到AndroidManifest.xml

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

再注冊一下NetWorkReciever

<receiver android:name=".reciever.NetWorkReciever">
    <intent-filter>
        <action android:name="android.intent.action.CONNECTIVITY_CHANGE"/>
    </intent-filter>

最終運(yùn)行效果

image.png

代碼地址:https://github.com/jiaoery/MyAndroidKotlin(也有一些其他的代碼學(xué)習(xí)記錄)

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容