Connectivity

Browse sample. Navegue pelo exemplo

Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI) IConnectivity para inspecionar a acessibilidade de 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 Wi-Fi. A IConnectivity interface tem um evento para monitorar alterações no estado de conexão dos dispositivos.

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

Introdução

Para acessar a funcionalidade, a Connectivity seguinte configuração específica da plataforma é 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 using as diretivas:

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

    - ou -

  • Atualize o manifesto do Android:

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

    <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 NetworkAccess propriedade.

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. Uma vez que o portal é usado para fornecer credenciais de autenticação, o acesso à Internet é concedido.
  • Local — Apenas acesso à rede local.
  • None — Não há conectividade disponível.
  • Unknown — Não é possível determinar a conectividade com a Internet.

É 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 for alterado, o ConnectivityChanged evento será 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 relatado por NetworkAccess , mas o acesso total à web não está disponível. Por causa de como a conectividade funciona em cada plataforma, ela só pode garantir que uma conexão esteja disponível. Por exemplo, o dispositivo pode estar conectado a uma rede Wi-Fi, mas o roteador está desconectado da internet. Neste caso Internet , pode ser relatado, mas uma conexão ativa não está disponível.