簡體   English   中英

如何檢查 API 30 或更高版本上的 Inte.net 連接?

[英]How to check for Internet Connectivity on API 30 or higher?

我想使用網絡功能檢查 Inte.net 連接,但它給了我這個錯誤:

Must be one of: NetworkCapabilities.NET_CAPABILITY_MMS, NetworkCapabilities.NET_CAPABILITY_SUPL, NetworkCapabilities.NET_CAPABILITY_DUN, NetworkCapabilities.NET_CAPABILITY_FOTA, NetworkCapabilities.NET_CAPABILITY_IMS, NetworkCapabilities.NET_CAPABILITY_CBS, NetworkCapabilities.NET_CAPABILITY_WIFI_P2P, NetworkCapabilities.NET_CAPABILITY_IA, NetworkCapabilities.NET_CAPABILITY_RCS, NetworkCapabilities.NET_CAPABILITY_XCAP, NetworkCapabilities.NET_CAPABILITY_EIMS, NetworkCapabilities .NET_CAPABILITY_NOT_METERED, NetworkCapabilities.NET_CAPABILITY_INTE.NET, NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED, NetworkCapabilities.NET_CAPABILITY_TRUSTED, NetworkCapabilities.NET_CAPABILITY_NOT_VPN, NetworkCapabilities.NET_CAPABILITY_VALIDATED, NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL, NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, NetworkCapabilities.NET_CAPABILITY_FOREGROUND, NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED, NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, NetworkCapab ... [截斷]

我的代碼:

fun checkInternetConnection(context : Context) : Boolean{
    val connectivityManager = context.getSystemService(
        Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    val network = connectivityManager.activeNetwork?: return false
    val activeNetwork = connectivityManager.getNetworkCapabilities(network)?: return false

    return when{
        activeNetwork.hasCapability(NetworkCapabilities.TRANSPORT_WIFI) -> true
        activeNetwork.hasCapability(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
        activeNetwork.hasCapability(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
        else -> false
    }
}

}

我嘗試使用 Android Studio 的自動更正來修復它,但它沒有編寫我想要的控制代碼,而是用不同的代碼更改了它。

我用它來檢查設備是否確實有連接

fun isConnected(context: Context):Boolean{
        val cManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val nCapabilities = cManager.getNetworkCapabilities(cManager.activeNetwork)
        return nCapabilities != null
    }

它對我有用,你可以試試。

在清單中

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在代碼中

public boolean isInternetAvailable() {
try {
    InetAddress ipAddr = InetAddress.getByName("google.com"); 
    //You can replace it with your name
        return !ipAddr.equals("");

    } catch (Exception e) {
        return false;
    }
}

//返回 boolean 值 if.network available

    private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}

暫無
暫無

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

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