【问题标题】:Proper way to check if Wifi is connected in android检查Wifi是否在android中连接的正确方法
【发布时间】:2017-08-10 19:13:58
【问题描述】:

对于我的应用,在与服务器联系之前,我需要确保用户已连接到 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。如果是这样,单独使用它就足够了吗?

【问题讨论】:

  • 下面的很多答案都建议使用现在已弃用(从 API 29 开始)的方法,例如 getActiveNetworkInfo(),Android 现在建议一些处理网络信息的新方法,请参阅我的答案 @987654322 @.

标签: android wifi android-wifi wifimanager android-connectivitymanager


【解决方案1】:

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

【讨论】:

  • 但是即使设备连接到移动数据,NetworkInfo.isConnected() 也会返回 true 对吧?那么安全的方法是我的第二种方法?
  • 是的,您应该将它与上面的连接类型检查结合使用。
【解决方案2】:

最佳实践

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();
}

【讨论】:

  • 什么是 MagazineApplication?`
【解决方案3】:

我相信这应该可行,

   public boolean isWifiConnected()
    {
        ConnectivityManager cm = (ConnectivityManager)this.mContext.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (cm != null) && (cm.getActiveNetworkInfo() != null) &&
                (cm.getActiveNetworkInfo().getType() == 1);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2023-04-03
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多