TIP C# - NetworkInformation, detectar si el móvil tiene conexión a internet
Hola geeks!
Hoy vamos a ver como gestionar si tenemos conexión a Internet o no. Es bastante fácil y simple, así que os invito siempre a que implementéis en aplicaciones que necesitan hacer llamadas al servidor o en las llamadas a una página web, por ejemplo.
Lo primero que vamos a hacer es en nuestra clase declarar una variable booleano isNetworkEnabled. En el Constructor, lo inicializamos con la conexión actual del dispositivo con NetworkInformation.GetInternetConnectionProfile().
private bool isNetworkEnabled; public AboutViewModel() { IsNetworkEnabled = NetworkInformation.GetInternetConnectionProfile() != null; NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; }
También vamos a suscribirnos al evento NetworkStatusChanged e implementamos un método llamado NetworkInformation_NetworkStatusChanged:
void NetworkInformation_NetworkStatusChanged(object sender) { IsNetworkEnabled = NetworkInformation.GetInternetConnectionProfile() != null; }
De está manera, siempre tenemos el booleano actualizado a la conexion de nuestro dispositivo. Si esto lo tenemos en una ViewModel y lo tenemos bindeado a una View como visto en los tutoriales siguientes, podemos pasar a nuestra DelegateCommand en el CanExecute un método tipo:
private bool OnlineCommandCanExec() { return IsNetworkEnabled; }
de manera que cuando declaramos un DelegateCommand, lo tendremos de la siguiente manera:
private bool isNetworkEnabled; public AboutViewModel() { IsNetworkEnabled = NetworkInformation.GetInternetConnectionProfile() != null; NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged; GeekyTheoryCommand = new DelegateCommand(GeekyTheoryCommandExec, OnlineCommandCanExec); } public bool IsNetworkEnabled { get { return isNetworkEnabled; } set { isNetworkEnabled = value; OnPropertyChanged(); } } private bool OnlineCommandCanExec() { return IsNetworkEnabled; } public ICommand GeekyTheoryCommand { get; private set; } private void GeekyTheoryCommandExec() { WebBrowserTask webBrowserTask = new WebBrowserTask(); webBrowserTask.Uri = new Uri("http://geekytheory.com", UriKind.Absolute); webBrowserTask.Show(); } void NetworkInformation_NetworkStatusChanged(object sender) { IsNetworkEnabled = NetworkInformation.GetInternetConnectionProfile() != null; }
Gracias al DelegateCommand, si no tenemos una conexión a internet, deshabilitará automaticamente el botón a la que estaba subscrita.
NOTA: Por su puesto podéis enlazar nuestra propiedad IsNetworkEnabled a la propiedad Visibility o IsEnabled de los controles de XAML sin tener que hacerlo de esta manera.
Hasta aquí llega otro tutorial. Si os ha gustado no os lo quedéis para vosotros, compartid ;)
Happy Coding!