2014-10-14 4 views
3

В Detect if Network is Available введен класс Reachability. InternetConnectionStatus(), похоже, не делает того, что я хочу. Я хочу проверить, доступен ли WiFi, независимо от того, возможно ли подключение к Интернету. Не знаю, является ли причиной этого недостающий DNS-сервер или что-то подобное. В настоящее время кажется, что интернет-соединение всегда проверяется. Есть LocalWifiConnectionStatus() лучший?Проверьте, есть ли WIFI на Xamarin iOS

Как я могу проверить только, зарегистрирован ли пользователь в WLAN-соединении?

ответ

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

Спасибо. В настоящее время у меня больше нет тестовой среды. Но если я скажу вам, если бы это сработало. – 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; 
} 
4
  1. Открыть пакет Nuger менеджер
  2. Просто найдите плагин xam.plugin.connectivity и установить его.

Теперь добавьте этот код для проверки доступа в Интернет к своему классу и используйте namesapce с помощью Plugin.Connectivity;

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