簡體   English   中英

NetWorkInfo、connectivityManager.ActiveNetworkInfo 和 .IsConnected 已過時

[英]NetWorkInfo, connectivityManager.ActiveNetworkInfo, and .IsConnected are obsolete

我有一個面向 Android 8.0(API 級別 26 - Oreo)到 Android 10.0(API 級別 29 - Q)的應用程序,以下代碼已棄用:

            ConnectivityManager connectivityManager = (ConnectivityManager)GetSystemService(ConnectivityService);
            NetworkInfo activeConnection = connectivityManager.ActiveNetworkInfo;
            bool isOnline = (activeConnection != null) && activeConnection.IsConnected;

如果NetworkInfo和與之相關的任何東西都貶值了,我在它的位置使用什么。 我一整天都在研究這個問題,我看到的每一個建議都使用了折舊的功能(用 java 編寫,這對我來說是個謎)。 所以請不要告訴我這是一個已經在某處發布的問題的重復,它不是。 另外,如果您提供代碼,請使用 c#。

雖然代碼在 Kotlin 中,但我希望你能理解什么是替代方案。

fun isConnectedToTheInternet(): Boolean {
        val cm = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            cm.run {
                cm.getNetworkCapabilities(cm.activeNetwork)?.run {
                    return when {
                        hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                        hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                        hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                        else -> false
                    }
                }
            }
        } else {
            cm.run {
                cm.activeNetworkInfo?.run {
                    if (type == ConnectivityManager.TYPE_WIFI) {
                        return true
                    } else if (type == ConnectivityManager.TYPE_MOBILE) {
                        return true
                    }
                }
            }
        }

        return false
    }

如果它可以幫助您,或者是否有人可以將此代碼轉換為 C#。
這段代碼在 Kotlin 中有效的,並且沒有折舊

private fun isInternetConnection(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val capability = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
    return capability?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) ?: false
}

希望能幫到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM