Connectivity

Procurar amostra. Procurar no exemplo

Esse artigo descreve como você pode usar a interface IConnectivity do .NET MAUI (.NET Multi-platform App UI) para inspecionar a acessibilidade da rede do dispositivo. A conexão de rede pode ter acesso à internet. Os dispositivos também contêm diferentes tipos de conexões de rede, como Bluetooth, celular ou WiFi. A interface IConnectivity possui um evento para monitorar as alterações no estado de conexão dos dispositivos.

A implementação padrão da interface IConnectivity está disponível por meio da propriedade Connectivity.Current. A interface IConnectivity e a classe Connectivity estão contidas no namespace Microsoft.Maui.Networking.

Introdução

Para acessar a funcionalidade Connectivity, a configuração específica da plataforma a seguir é necessária.

A permissão AccessNetworkState é necessária e deve ser configurada no projeto do Android. Isso pode ser usado das seguintes maneiras:

  • Adicione a permissão baseada em assembly:

    Abra o arquivo Platforms/Android/MainApplication.cs e adicione os seguintes atributos de assembly após as diretivas using:

    [assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
    

    - ou -

  • Atualize o manifesto do Android:

    Abra o arquivo Platforms/Android/AndroidManifest.xml e adicione o seguinte no nó manifest:

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    - ou -

  • Atualize o Manifesto do Android no editor de manifesto:

    No Visual Studio, clique duas vezes no arquivo Platforms/Android/AndroidManifest.xml para abrir o editor de manifesto do Android. Em seguida, em Permissões necessárias, verifique a permissão ACCESS_NETWORK_STATE. Isso atualizará automaticamente o arquivo AndroidManifest.xml.

Usando Connectivity

Você pode determinar o escopo da rede atual verificando a propriedade NetworkAccess.

NetworkAccess accessType = Connectivity.Current.NetworkAccess;

if (accessType == NetworkAccess.Internet)
{
    // Connection to internet is available
}

O acesso à rede se enquadra às seguintes categorias:

  • Internet — Acesso local e à Internet.
  • ConstrainedInternet — Acesso limitado à internet. Esse valor significa que há um portal cativo, onde o acesso local a um portal da Web é fornecido. Depois que o portal é usado para fornecer credenciais de autenticação, o acesso à Internet é concedido.
  • Local — Apenas acesso local à rede.
  • None — Não connectivity está disponível.
  • Unknown — Não é possível determinar a internet connectivity.

É possível verificar que tipo de perfil de conexão o dispositivo está usando ativamente:

IEnumerable<ConnectionProfile> profiles = Connectivity.Current.ConnectionProfiles;

if (profiles.Contains(ConnectionProfile.WiFi))
{
    // Active Wi-Fi connection.
}

Sempre que o perfil de conexão ou o acesso à rede é alterado, o evento ConnectivityChanged é gerado:

public class ConnectivityTest
{
    public ConnectivityTest() =>
        Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;

    ~ConnectivityTest() =>
        Connectivity.ConnectivityChanged -= Connectivity_ConnectivityChanged;

    void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs e)
    {
        if (e.NetworkAccess == NetworkAccess.ConstrainedInternet)
            Console.WriteLine("Internet access is available but is limited.");

        else if (e.NetworkAccess != NetworkAccess.Internet)
            Console.WriteLine("Internet access has been lost.");

        // Log each active connection
        Console.Write("Connections active: ");

        foreach (var item in e.ConnectionProfiles)
        {
            switch (item)
            {
                case ConnectionProfile.Bluetooth:
                    Console.Write("Bluetooth");
                    break;
                case ConnectionProfile.Cellular:
                    Console.Write("Cell");
                    break;
                case ConnectionProfile.Ethernet:
                    Console.Write("Ethernet");
                    break;
                case ConnectionProfile.WiFi:
                    Console.Write("WiFi");
                    break;
                default:
                    break;
            }
        }

        Console.WriteLine();
    }
}

Limitações

É importante saber que é possível que Internet seja reportado pelo NetworkAccess. No entanto, o acesso completo à Web não estará disponível. Devido ao funcionamento da connectivity em cada plataforma, só é possível garantir que uma conexão disponível. Por exemplo, o dispositivo pode estar conectado a uma rede Wi-Fi, mas o roteador está desconectado da Internet. Nesta instância, a Internet pode ser reportada, mas uma conexão ativa não estará disponível.