![](/img/trans.png)
[英]Force the use of the cellular connection on android while connected to WiFi
[英]Check for WiFi and cellular connection when connected to a VPN
在我的 Android 應用程序中,我使用以下兩種方法來檢查設備是否連接到 WiFi 以及網絡連接是否可用。 我假設當設備連接到 WiFi 或移動網絡時,互聯網也可用。
public static boolean wifiConnected(Context context) {
boolean isWifiConn = false;
ConnectivityManager connMgr = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
android.net.Network network = connMgr.getActiveNetwork();
if (network == null) return false;
NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
if(capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){
isWifiConn = true;
}
} else {
for (android.net.Network network : connMgr.getAllNetworks()) {
NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
isWifiConn = true;
break;
}
}
}
return isWifiConn;
}
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (capabilities != null) {
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
return true;
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
return true;
} else return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET);
}
} else {
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return (activeNetworkInfo != null) && activeNetworkInfo.isConnected();
}
}
return false;
}
如果設備通過 VPN 連接,則方法返回 false。 是否可以擴展方法以使它們即使在設備連接到 VPN 時也返回 true?
VPN 有一個特定的傳輸類型,因此您需要做的就是添加對capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)
的檢查。
您還可以將 API 級別檢查從Build.VERSION_CODES.Q
為Build.VERSION_CODES.M
。 唯一有問題的行是connectivityManager.getActiveNetwork()
但這在M (API 23) 中可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.