检查 Wifi 是否在安卓中连接的正确方法



对于我的应用程序,我需要确保用户在与服务器联系之前已连接到wifi。我找到了两种方法,但我不确定一种是否足够。

首先,我添加以下内容:

WifiManager wifiManager = (WifiManager) getActivity().getApplicationContext()
            .getSystemService(WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
        buildAlertNoWifi();
        showProgressDialog(false, "");
        return;
}

然后我正在这样做:

ConnectivityManager cm = (ConnectivityManager) getActivity()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null) { // connected to the internet
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
            // connected to wifi
        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
            // connected to the mobile provider's data plan
            Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
            return;
        }
    } else {
        Toast.makeText(getContext(), "Make sure you connect to wifi.", Toast.LENGTH_LONG).show();
        return;
    }

所以我想知道wifiManager.isWifiEnabled()是否返回设备是否连接到 wifi 或只是打开了 wifi。如果是这样,单独使用它就足够了吗?

我相信WifiManager.isWifiEnabled()只检查设备的wifi是否打开。请使用NetworkInfo.isConnected()NetworkInfo.isConnectedOrConnecting()检查它是否已连接到任何网络。

最佳实践

public boolean isWifiConnected() {
    NetworkInfo net = getActiveNetworkInfo();
    return (isConnected(net) && net.getType() == TYPE_WIFI);
}
private NetworkInfo getActiveNetworkInfo() {
    ConnectivityManager connManager = (ConnectivityManager) 
Application.getContext()
            .getSystemService(Application.CONNECTIVITY_SERVICE);
    return connManager.getActiveNetworkInfo();
}
我相信

这应该有效,

   public boolean isWifiConnected()
    {
        ConnectivityManager cm = (ConnectivityManager)this.mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        return (cm != null) && (cm.getActiveNetworkInfo() != null) &&
                (cm.getActiveNetworkInfo().getType() == 1);
    }

最新更新