[英]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.