Maui 网络
[删除(380066935@qq.com或微信通知)]
更好的阅读体验请查看原文:https://learn.microsoft.com/zh-cn/dotnet/maui/platform-integration/communication/networking?view=net-maui-7.0&tabs=ios
本文介绍如何使用 .NET 多平台应用 UI (.NET MAUI) IConnectivity 接口来检查设备的网络可访问性。 网络连接可能有权访问 Internet。 设备还包含不同类型的网络连接,例如蓝牙、手机网络或 WiFi。 接口 IConnectivity
具有监视设备连接状态更改的事件。
接口的默认实现 IConnectivity
可通过 Connectivity.Current 属性获得。 IConnectivity
接口和 Connectivity
类都包含在 命名空间中Microsoft.Maui.Networking
。
入门
若要访问 Connectivity 该功能,需要以下特定于平台的设置。
需要具有 AccessNetworkState
权限,并且必须在 Android 项目中进行配置。 可以通过以下方法添加此权限:
添加基于程序集的权限:
打开 Platforms/Android/MainApplication.cs 文件,并在指令后面
using
添加以下程序集属性:[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
- 或 -
更新 Android 清单:
打开 “平台/Android/AndroidManifest.xml ”文件,并在节点中添加
manifest
以下内容:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
使用 Connectivity
可以通过检查 NetworkAccess 属性来确定当前网络的范围。
NetworkAccess accessType = Connectivity.Current.NetworkAccess;
if (accessType == NetworkAccess.Internet)
{
// Connection to internet is available
}
网络访问分为以下几类:
- Internet — 本地和 Internet 访问。
- ConstrainedInternet — Internet 访问受限。 此值表示存在一个强制门户,其中提供了对 Web 门户的本地访问权限。 使用门户提供身份验证凭据后,将授予 Internet 访问权限。
- Local — 仅限本地网络访问。
- None — 没有可用的连接。
- Unknown — 无法确定 Internet 连接。
你可以检查设备当前正在使用哪种连接配置文件:
IEnumerable<ConnectionProfile> profiles = Connectivity.Current.ConnectionProfiles;
if (profiles.Contains(ConnectionProfile.WiFi))
{
// Active Wi-Fi connection.
}
每当连接配置文件或网络访问发生更改时,将引发事件 ConnectivityChanged :
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();
}
}
限制
请务必知道,可能是报告了NetworkAccess,Internet但对 Web 的完全访问权限不可用。 由于连接在每个平台上的工作方式,它只能保证连接可用。 例如,设备可能连接到Wi-Fi网络,但路由器与 Internet 断开连接。 在此实例 Internet
中,可能会报告活动连接不可用。