【问题标题】:Check if WIFI is available on Xamarin iOS检查 WIFI 在 Xamarin iOS 上是否可用
【发布时间】:2014-10-14 06:45:34
【问题描述】:

Detect if Network is Available 中引入了Reachability 类。 InternetConnectionStatus() 似乎没有做我想做的事。无论是否可以连接 Internet,我都想检查 WiFi 是否可用。不知道是否是缺少 DNS 服务器或类似的原因。目前,似乎互联网连接总是经过测试。 LocalWifiConnectionStatus() 是不是更好?

如何仅检查用户是否已登录到 WLAN 连接?

【问题讨论】:

    标签: c# ios xamarin.ios xamarin wifi


    【解决方案1】:
    1. 打开 Nuger 包管理器
    2. 只要搜索插件 xam.plugin.connectivity 并安装它。

    现在添加此代码以检查您的班级的互联网并使用命名空间using Plugin.Connectivity;

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

    【讨论】:

      【解决方案2】:

      我不知道自我编写此代码以来是否有 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;
          }
      

      【讨论】:

      • 谢谢。目前我没有测试环境了。但如果我有,我会告诉你它是否有效。
      【解决方案3】:

      我知道这是旧的,但我正在寻找相同的东西并结合了答案......有人有更好的建议或理由不这样做吗?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多