2015-05-27 48 views
1

我試圖實現一個簡單的通知程序,當應用程序中的網絡連接發生變化時將廣播消息。Xamarin iOS NetworkReachability.SetNotification沒有觸發

我遇到的問題是,雖然該類在我的代碼要求時返回正確的連接狀態,但當連接狀態更改時,我的networkreachability對象的.SetNotification方法不會被觸發。

這是我的連接狀態檢查代碼,如果有人可以幫助突出顯示我做錯了什麼,將不勝感激,謝謝。

public event EventHandler ReachabilityChanged; 

public NetworkStatus Status() 
{ 
    if(_defaultRouteReachability == null) 
    { 
     _defaultRouteReachability = new NetworkReachability(new IPAddress(0)); 
    } 

    _defaultRouteReachability.SetNotification(OnChange); 
    _defaultRouteReachability.Schedule(CFRunLoop.Current, CFRunLoop.ModeDefault); 
    _defaultRouteReachability.TryGetFlags (out _flags); 

    return ParseFlags(); 
} 

NetworkStatus ParseFlags() 
{ 
    if (_flags == 0) 
     return NetworkStatus.NotReachable; 

    if (_flags.HasFlag(NetworkReachabilityFlags.ConnectionRequired) || 
     _flags.HasFlag(NetworkReachabilityFlags.InterventionRequired) || 
     _flags.HasFlag(NetworkReachabilityFlags.ConnectionOnDemand)) 
    { 
     return NetworkStatus.NotReachable; 
    } 

    if (_flags.HasFlag (NetworkReachabilityFlags.TransientConnection) || 
     _flags.HasFlag (NetworkReachabilityFlags.IsWWAN)) 
    { 
     return NetworkStatus.ReachableViaCarrierDataNetwork; 
    } 

    return NetworkStatus.ReachableViaWiFiNetwork; 
} 

void OnChange(NetworkReachabilityFlags flags) 
{ 
    var h = ReachabilityChanged; 
    if (h != null) 
     h(null, EventArgs.Empty); 
} 

回答

0

你應該嘗試使用現成Connectivity Plugin可用在Xamarin中,非常方便使用。

這是一個簡單的跨平臺插件,用於檢查移動設備的連接狀態,收集連接類型,帶寬等。