检查Xamarin iOS上WIFI是否可用

4
检测网络是否可用中,介绍了Reachability类。 InternetConnectionStatus()似乎不能实现我的需求。我想检查WiFi是否可用,而不管能否连接互联网。不知道缺少DNS服务器或类似原因是否是导致这种情况的原因。目前,似乎始终测试互联网连接。是LocalWifiConnectionStatus()更好吗?
如何仅检查用户是否已登录到WLAN连接?
3个回答

5
  1. 打开Nuger包管理器
  2. 搜索插件xam.plugin.connectivity并安装它。

现在将以下代码添加到您的类中以检查互联网,并使用命名空间using Plugin.Connectivity;

private bool CheckConnectivity()
    {
        var isConnected = CrossConnectivity.Current.IsConnected;
        return isConnected;
    }

1

我不知道自从我写下这段代码以来是否有API更新,但你可以尝试读取SSID:

    /// <summary>
    /// Gets the current SSID.
    /// </summary>
    /// <value>The current SSID.</value>
    public string CurrentSSID 
    {
        get
        {
            NSDictionary dict;
            var status = CaptiveNetwork.TryCopyCurrentNetworkInfo ("en0", out dict);
            if (status == StatusCode.NoKey)
            {
                return string.Empty;
            }

            var bssid = dict [CaptiveNetwork.NetworkInfoKeyBSSID];
            var ssid = dict [CaptiveNetwork.NetworkInfoKeySSID];
            var ssiddata = dict [CaptiveNetwork.NetworkInfoKeySSIDData];

            return ssid.ToString();
        }
    }

如果适合您的需求,您也可以尝试使用LocalWifiConnectionStatus。

https://github.com/XForms/Xamarin-Forms-Labs/blob/master/src/Xamarin.Forms.Labs/Xamarin.Forms.Labs.iOS/Services/Reachability.cs

    /// <summary>
    /// The local WiFi connection status.
    /// </summary>
    /// <returns>
    /// The <see cref="NetworkStatus"/>.
    /// </returns>
    public static NetworkStatus LocalWifiConnectionStatus()
    {
        NetworkReachabilityFlags flags;
        return (!IsAdHocWiFiNetworkAvailable(out flags) || (flags & NetworkReachabilityFlags.IsDirect) == 0) ?
            NetworkStatus.NotReachable :
            NetworkStatus.ReachableViaWiFiNetwork;
    }

谢谢。目前我没有测试环境了。但如果有的话,我会告诉你它是否起作用。 - testing

0

我知道这已经过时了,但我正在寻找同样的东西并且有点结合了答案...有人有更好的建议或者不建议像这样做的原因吗?

public NetworkState GetNetworkState()
{
    object ssid = null;
    NSDictionary dict = null;

    var status = CaptiveNetwork.TryCopyCurrentNetworkInfo("en0", out dict);
    if (status == StatusCode.OK)
        ssid = dict[CaptiveNetwork.NetworkInfoKeySSID];

    using (SystemConfiguration.NetworkReachability r = new NetworkReachability("www.appleiphonecell.com"))
    {
        NetworkReachabilityFlags flags;

        if (r.TryGetFlags(out flags))
        {
            if ((flags & NetworkReachabilityFlags.Reachable) != 0)
            {
                if (ssid != null && !string.IsNullOrEmpty(ssid.ToString()))
                    return NetworkState.Wifi;
                else
                    return NetworkState.Carrier;//we are not connected to wifi, but we can reach the site...
            }
        }
    }

    return NetworkState.None;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接