如何查看移动数据和WIFI是否都已连接?
How to check if both Mobile Data and WIFI are connected?
我有这个代码:
ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfoWifi =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo networkInfoMobileData =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
然后在我的 Android 网络设置中,移动数据和 WiFi 都已启用。以下检查是
networkInfoWifi.isConnected(); // results to TRUE
networkInfoMobileData.isConnected(); // results to FALSE
我的应用在 Android Lollipop 上运行。我希望上面的两项检查都应该 return TRUE。为什么会这样?我需要它们都是真实的。我该怎么办?
ConnectivityManager.getNetworkInfo()
是一种已弃用的方法。
正确的做法是ConnectivityManager.NetworkCallback
为了回答您的问题,请检查您是通过 WiFi 还是移动数据连接到互联网:
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build();
connMgr.requestNetwork(request, new ConnectivityManager.NetworkCallback() {
// This callback is invoked when there is a valid Mobile Data or WiFi network
// but is later lost during the course of using the application.
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
// This callback is invoked when there is a valid Mobile Data or WiFi network
// that is ready for use
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
// This callback is invoked when there is no valid Mobile Data or WiFi network
// after a specific timeout has timed out.
@Override
public void onUnavailable() {
super.onUnavailable();
}
});
还有各种其他回调,但我相信对于您的用例,这些是您需要的主要回调。
最后,要添加一个特定的超时,在 onUnavailable
回调中提到,您可以将此构造函数用于您的 ConnectivityManager.NetworkCallback
:
ConnectivityManager.NetworkCallback(int timeoutMs)
我真的希望这对您有所帮助。查看更多信息 API here
我从来没有找到制作 networkInfoWifi.isConnected()
和
networkInfoMobileData.isConnected()
到 return 均为真。这可能是因为Android一次只能连接到一个接口。
这个界面选择也是Android自动启动Lollipop设备完成的。 Android Lollipop defaults to Mobile Data when Wi-Fi has not Internet access?
我有这个代码:
ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfoWifi =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo networkInfoMobileData =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
然后在我的 Android 网络设置中,移动数据和 WiFi 都已启用。以下检查是
networkInfoWifi.isConnected(); // results to TRUE
networkInfoMobileData.isConnected(); // results to FALSE
我的应用在 Android Lollipop 上运行。我希望上面的两项检查都应该 return TRUE。为什么会这样?我需要它们都是真实的。我该怎么办?
ConnectivityManager.getNetworkInfo()
是一种已弃用的方法。
正确的做法是ConnectivityManager.NetworkCallback
为了回答您的问题,请检查您是通过 WiFi 还是移动数据连接到互联网:
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest request = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build();
connMgr.requestNetwork(request, new ConnectivityManager.NetworkCallback() {
// This callback is invoked when there is a valid Mobile Data or WiFi network
// but is later lost during the course of using the application.
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
}
// This callback is invoked when there is a valid Mobile Data or WiFi network
// that is ready for use
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
}
// This callback is invoked when there is no valid Mobile Data or WiFi network
// after a specific timeout has timed out.
@Override
public void onUnavailable() {
super.onUnavailable();
}
});
还有各种其他回调,但我相信对于您的用例,这些是您需要的主要回调。
最后,要添加一个特定的超时,在 onUnavailable
回调中提到,您可以将此构造函数用于您的 ConnectivityManager.NetworkCallback
:
ConnectivityManager.NetworkCallback(int timeoutMs)
我真的希望这对您有所帮助。查看更多信息 API here
我从来没有找到制作 networkInfoWifi.isConnected()
和
networkInfoMobileData.isConnected()
到 return 均为真。这可能是因为Android一次只能连接到一个接口。
这个界面选择也是Android自动启动Lollipop设备完成的。 Android Lollipop defaults to Mobile Data when Wi-Fi has not Internet access?