Mobile

29 abr, 2019

Xamarin Rocket – Parte 05: notificação ao alterar a conexão

Publicidade

Fala, galera!

Tentando manter a periodicidade semanal, trouxemos mais uma dica rápida de Xamarin.Forms!

A ideia é ser um artigo bem rápido, e todas as dicas ficarão em um único repositório. Se você perdeu algum, veja os que já saíram:

Ficar offline não é nada incomum de acontecer em aplicativos (ainda mais se a sua operadora for #8221;{suaOperadora}”). Mas se alguma ação em seu app for dependente de conexão, como saber e como tratar, caso isso aconteça?

Existe uma forma muito simples para obtermos o estado da conexão, e o Xamarin.Essentials vai nos ajudar e muito com esse trabalho!

Se você não está usando o Visual Studio 8 do Mac ou Visual Studio 2019 do Windows, clique aqui e veja como configurar o Xamarin.Essentials.

Adicionaremos a permissão <uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” /> arquivo AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="br.com.bertuzzi.xamarinrocket">
	<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<application android:label="XamarinRocket.Android"></application>
</manifest>

Pronto! Agora, em nossa ViewModel só precisamos assinar o evento Connectivity.ConnectivityChanged do Essentials:

 public bool IsNotConnected { get; set; }


 public MainViewModel()
 {

   Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
   IsNotConnected = Connectivity.NetworkAccess != NetworkAccess.Internet;

 }

  ~MainViewModel()
  {
      Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;
  }

  void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
  {
     IsNotConnected = e.NetworkAccess != NetworkAccess.Internet;
  }

Pronto! Agora, toda vez que a conexão for perdida, a variável IsNotConnected vai receber True.

Não acredita? Então, em nossa View vamos criar um Label:

 
<StackLayout Padding="0,30,0,0">
            
 <Label TextColor="Red"
  IsVisible="{Binding IsNotConnected}"
  FontSize="50"
  Text="Conexão perdida"
  FontAttributes="Bold"/>
            
</StackLayout>

A ideia é: quando não tiver conexão, o Label aparecerá.

Vamos rodar?

Legal, né? Mas isso foi à nível de ViewModel, mas e do app inteiro?

Simples. Colocamos o Evento no App.xaml.cs:

using System;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace XamarinRocket
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

             Connectivity.ConnectivityChanged += ConnectivityChanged;

            MainPage = new MainPage();
        }

        private void ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
        {
            if (e.NetworkAccess != NetworkAccess.Internet)
            {
                Application.Current.MainPage.DisplayAlert("Atenção", "Estamos sem internet :(", "OK");
            }
            
        }
    }
}

E então rodamos:

É uma dica bem simples, mas que ajuda muito!

Caso queira baixar o código utilizado no Exemplo, clique aqui. Se quiser ver outros artigos sobre Xamarin, acesse este link.

Espero ter ajudado.

Aquele abraço!