Почему сетевой плагин не работает, когда происходит навигация - PullRequest
0 голосов
/ 18 мая 2018

Если сетевое соединение не включено, чтобы проверить, не выключено ли оно, я использую его для подключения.

Я вызываю этот код в ViewModelLocator class

Private static async void NetworkConnectivityChanged(object sender,Plugin.Connectivity.Abstractions.ConnectivityChangedEventArgs e){}
CrossConnectivity.Current.ConnectivityChanged = NetworkConnectivityChanged;

В моем приложении Windows после навигации, если состояние сетевого подключения изменилось ... Здесь это событие не срабатывает, но если не используется навигация, мы меняем состояние сети, и это происходитработа.

1 Ответ

0 голосов
/ 18 мая 2018

Обходной путь должен реализовать собственный обработчик изменений сети на стороне Winphone или UWP и прекратить обработку изменений сети на стороне PCL только для Winphone и UWP.Вы можете сделать это, проверив платформу перед обработкой.

Создайте новый класс Network.cs со следующим кодом (он определяет, есть ли какие-либо изменения в сетевом соединении)

 public class InternetConnectionChangedEventArgs : EventArgs

{

    public InternetConnectionChangedEventArgs(bool isConnected)

    {

        this.isConnected = isConnected;

    }



    public bool IsConnected

    {

        get { return this.isConnected; }

    }



    private bool isConnected;

}



public static class Network

{

    public static event EventHandler<InternetConnectionChangedEventArgs>

        InternetConnectionChanged;



    static Network()

    {

        NetworkInformation.NetworkStatusChanged += (s) =>

        {

            if (InternetConnectionChanged != null)

            {

                var arg = new InternetConnectionChangedEventArgs(IsConnected);

                InternetConnectionChanged(null, arg);

            }

        };

    }



    public static bool IsConnected

    {

        get

        {

            var profile = NetworkInformation.GetInternetConnectionProfile();

            var isConnected = (profile != null

                && profile.GetNetworkConnectivityLevel() ==

                NetworkConnectivityLevel.InternetAccess);

            return isConnected;

        }

    }

}

Затемв app.xaml.cs в UWP или WinPhone зарегистрируйте обработчик изменений сети в событии OnLaunched , как показано ниже

Network.InternetConnectionChanged += this.Network_InternetConnectionChanged;

, а вот обработчик события

 private void Network_InternetConnectionChanged(object sender,InternetConnectionChangedEventArgs e)

    {
      if(e.IsConnected){
         ///code to handle when the internet connectivity is there
      }
      else{
        //code to handle when the internet connectivity is lost
      }

    }
...