2016-11-07 103 views
3

我是Xamarin.Forms中的新成员,我想检查iOS和Android应用中的互联网连接状态。事实上,使用CrossConnectivity插件,我可以成功检查互联网连接,但它不能用作侦听器。例如,当我打开我的应用程序和互联网连接不存在时,它会向我显示“没有互联网连接”的消息,现在如果我打开我的移动数据,那么它也会显示相同的消息。我正在使用以下代码:Xamarin.Forms中的互联网连接监听器

string isConnected=CrossConnectivity.Current.IsConnected?"Connected":"No Connection"; 

我的应用程序无法在中间位置收听互联网连接的状态变化。

+0

我做了具体每个平台,如果你有兴趣,我可以提供一个答案,否则我不知道它是否存在XF .. –

+0

当然。我可以使用依赖服务。请给我一个相同的平台特定的解决方案。 – Dipak

回答

3

使用插件CrossConnectivity,你要听经时变化ConnectivityChanged,所以在您的网页,或你的App类中添加以下代码编写事件处理程序:

CrossConnectivity.Current.ConnectivityChanged += (sender, args) => 
{ 
    //your implementation 
    this.DisplayAlert("Connectivity Changed", "IsConnected: " + args.IsConnected.ToString(), "OK"); 
}; 
+0

当连接改变时,这个事件是否会调用每一个事件? – Dipak

+0

我应该在哪里声明该事件,以便在连通性更改时触发它? – Dipak

+0

这取决于您的需求,如果您只需在页面可见时收听更改,则可以在页面的OnAppearing方法中调用它。 – Hichaam

1

我对Android的解决方案,但我还没有开始在iOS上打工 (聊胜于无;) 首先创建一个BroadcastReceiver

public class Localize: BroadcastReceiver 
    { 
     public static Context context; 

     public Localize(Context ctx) 
     { 
      context = ctx; 
     } 
     public override void OnReceive (Context context, Intent intent) 
     { 
      isNetworkAvailable (context); 
     } 

    public void isNetworkAvailable(Context context) 
    { 
     Boolean state = false; 
     ConnectivityManager connectivity = (ConnectivityManager) 
      context.GetSystemService(Context.ConnectivityService); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.GetAllNetworkInfo(); 
      foreach (NetworkInfo nwork in info) 
      { 
       if (nwork.GetState() == NetworkInfo.State.Connected) { 

        ConnectionDetected();//Execute your fonction here 
        break; 

       } 
      } 
     } 
    } 

然后在您的活动意图注册您的广播接收器(以MainActivity例如)

IntentFilter filter = new IntentFilter(ConnectivityManager.ConnectivityAction); 
receiver = new Localize(this); 
RegisterReceiver(receiver, filter); 

这应该工作,只要你的应用程序运行。如果你想运行,即使您的应用程序被杀害,你应该创建一个服务,然后章服务ister广播接收器在您的服务..

+0

如何检查PCL中的连接状态? – Dipak

+0

我是这样做的 CrossConnectivity.Current.IsReachable(“localhost”); 它返回一个布尔值 –