2016-11-07 11 views
3

Я новичок в Xamarin.Forms, и я хочу проверить статус подключения к Интернету в приложениях iOS и Android. Фактически, используя плагины CrossConnectivity, я могу успешно проверить подключение к Интернету, но он не работает как Listener. Например, когда я открываю свое приложение и подключение к Интернету, его нет, тогда он показывает мне сообщение «Нет подключения к Интернету», и теперь, если я нахожусь в моих мобильных данных, тогда он также показывает мне то же сообщение. Я использую ниже код для этого:Слушатель интернет-подключения в 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, но я не начал работать на КСН часть (лучше, чем ничего;) Первый Создать 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; 

       } 
      } 
     } 
    } 

Затем зарегистрировать BroadcastReceiver с целью в своей деятельности (в MainActivity, например)

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

Это должно работать до тех пор, как приложение работает .. Если вы хотите сервис, который работает, даже если ваш App будет убит, вы должны создать службу, а затем рег Истр BroadcastReceiver в службе ..

+0

Как проверить состояние соединения в PCL? – Dipak

+0

Я делаю это с этим CrossConnectivity.Current.IsReachable ("localhost"); возвращает логическое значение –