参考 https://developer.android.com/training/monitoring-device-state/connectivity-status-type
要指定网络的传输类型,例如 Wi-Fi 或蜂窝连接,以及当前已连接网络的功能(例如互联网连接),您必须配置一个网络请求。
声明描述应用程序网络连接需求的 NetworkRequest。以下代码创建了一个请求,该请求连接到互联网并使用 Wi-Fi 或蜂窝连接作为传输类型。
将此添加到 onCreate 中
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build();
配置网络回调:当您使用ConnectivityManager注册NetworkRequest时,必须实现一个NetworkCallback来接收有关连接状态和网络功能变化的通知。在NetworkCallback中最常实现的函数包括以下几个:onAvailable()表示设备已连接到满足NetworkRequest中指定的能力和传输类型要求的新网络;onLost()表示设备已失去与网络的连接;onCapabilitiesChanged()表示网络的功能已更改,NetworkCapabilities对象提供有关网络当前功能的信息。
添加监听器。
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
@Override
public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
super.onCapabilitiesChanged(network, networkCapabilities);
final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
}};
注册网络更新
声明NetworkRequest和NetworkCallback后,使用requestNetwork()或registerNetworkCallback()函数来搜索设备连接的满足NetworkRequest的网络。然后将状态报告给NetworkCallback。
在onCreate中注册
ConnectivityManager connectivityManager =
(ConnectivityManager) getSystemService(ConnectivityManager.class)
connectivityManager.requestNetwork(networkRequest, networkCallback)