在Android中,可以使用ConnectivityManager类来检查网络连接的可用性。下面是一个示例代码,演示了如何检查特定网络传输类型的可用性:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.os.Build;
public class NetworkUtils {
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
// 如果设备运行的是Android 10及以上版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
if (capabilities != null) {
return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) ||
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
}
} else {
// 如果设备运行的是Android 9及以下版本
Network[] networks = connectivityManager.getAllNetworks();
for (Network network : networks) {
NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
if (networkCapabilities != null) {
if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) ||
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
return true;
}
}
}
}
}
return false;
}
}
在上面的示例代码中,isNetworkAvailable()
方法接收一个Context
对象作为参数,并在其中获取ConnectivityManager
实例。然后,根据设备运行的Android版本,使用不同的API来获取网络传输类型的可用性。
在Android 10及以上版本中,可以使用getNetworkCapabilities()
方法获取当前活动的网络连接的NetworkCapabilities
对象,并通过hasTransport()
方法检查所需网络传输类型的可用性。
在Android 9及以下版本中,需要使用getAllNetworks()
方法获取所有网络连接的数组,并遍历每个网络连接,获取其NetworkCapabilities
对象,并使用hasTransport()
方法检查所需网络传输类型的可用性。
最后,如果发现WiFi、以太网或移动网络的任何一种传输类型可用,则将返回true
,否则返回false
。