Connectivity
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.