📅  最后修改于: 2023-12-03 14:39:01.231000             🧑  作者: Mango
activeNetworkInfo
被弃用自API级别29(Android 10)起,activeNetworkInfo
已被弃用。此变更是为了更好地反映网络的多样性,以及应用程序在此多样性中运行的方式。 相反,应使用ConnectivityManager.NetworkCallback
来监听已连接的网络的状态。
activeNetworkInfo
?activeNetworkInfo
是一个NetworkInfo
对象,表示当前已连接的默认(Active)网络。你可以通过以下方式获得该对象:
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
activeNetwork
对象描述了连接到系统的网络的信息,例如网络类型(mobile、Wi-Fi等)、是否连接等。
activeNetworkInfo
?在之前的Android版本中,网络连接的类型和状态相对简单,因此提供了activeNetworkInfo
API来获取当前连接的网络状态。但是,随着Android系统的发展,它的网络变得越来越多样化,比如多个网络接口同时连接的复杂情况变得常见。在这种情况下,为每个网络接口提供单独的activeNetworkInfo
会变得越来越不切实际。
为了在这种多样性的网络环境中更好地支持应用程序,Android在API级别29中弃用了activeNetworkInfo
,并推荐使用新的网络监听API(ConnectivityManager.NetworkCallback
)。
activeNetworkInfo
?如果你的应用程序需要在Android Q及更高版本上运行,你应该把你的代码从使用activeNetworkInfo
转换成使用新的API。 以下是如何使用ConnectivityManager.NetworkCallback
来监听已连接网络的状态的示例代码:
private NetworkCallback networkCallback = new NetworkCallback() {
@Override
public void onAvailable(Network network) {
// 当网络连接时调用此方法
// network是一个新连接的Network对象
}
@Override
public void onLost(Network network) {
// 网络断开时调用此方法
}
};
private void registerNetworkCallback() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder().build();
cm.registerNetworkCallback(request, networkCallback);
}
private void unregisterNetworkCallback() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
cm.unregisterNetworkCallback(networkCallback);
}
代码中定义了一个NetworkCallback
回调对象,它在连接到网络时调用onAvailable
方法,在网络断开时调用onLost
方法。这使您可以在需要的情况下检测网络状态,并及时做出反应。为了注册回调对象,您需要创建一个网络请求(使用NetworkRequest.Builder()
方法),并通过调用registerNetworkCallback
方法将其注册到系统中。记住在不需要它时通过unregisterNetworkCallback()
方法注销您的回调对象。
随着Android系统的发展,我们需要在多样化的网络环境中开发应用程序。activeNetworkInfo
被弃用是这一发展的体现。而新的API (ConnectivityManager.NetworkCallback
)已经为我们提供了更好的方法用于应对多样性的网络环境,并更好地掌握我们应用程序中的网络连接。因此,从API 29起,使用ConnectivityManager.NetworkCallback
代替activeNetworkInfo
是一个不可或缺的过渡措施。