如何查看移动数据和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?