Connectivity
本文說明如何使用 .NET 多平臺應用程式 UI (.NET MAUI) IConnectivity 介面來檢查裝置的網路輔助功能。 網路連線可以存取因特網。 裝置也包含不同類型的網路連線,例如藍牙、行動數據或WiFi。 介面 IConnectivity
有事件可監視裝置連線狀態的變更。
介面的預設實作 IConnectivity
可透過 Connectivity.Current 屬性取得。 IConnectivity
介面和Connectivity
類別都包含在 命名空間中Microsoft.Maui.Networking
。
開始使用
若要存取 Connectivity 此功能,需要下列平臺特定設定。
需要 AccessNetworkState
權限,而且必須在 Android 專案中設定。 能以下列方式新增:
新增元件型權限:
開啟 Platform/Android/MainApplication.cs 檔案,並在 指示詞之後
using
新增下列元件屬性:[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]
- 或 -
更新 Android 指令清單:
開啟 [平臺/Android/AndroidManifest.xml] 檔案,並在
manifest
節點中新增下列內容:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- 或 -
更新指令清單編輯器中的 Android 指令清單:
在 Visual Studio 中,按兩下 [平臺/Android/AndroidManifest.xml ] 檔案,以開啟 Android 指令清單編輯器。 然後,在 [必要許可權] 底下,檢查ACCESS_NETWORK_STATE許可權。 這將會自動更新 AndroidManifest.xml 檔案。
使用 Connectivity
您可以檢查 NetworkAccess 屬性來判斷目前網路的範圍。
NetworkAccess accessType = Connectivity.Current.NetworkAccess;
if (accessType == NetworkAccess.Internet)
{
// Connection to internet is available
}
網路存取可分為下列類別:
- Internet — 本機和因特網存取。
- ConstrainedInternet — 有限的因特網存取。 這個值表示有一個 Captive 入口網站,其中會提供入口網站的本機存取權。 一旦入口網站用來提供驗證認證,就會授與因特網存取權。
- Local — 僅限局域網路存取。
- None - 無法使用 connectivity 。
- Unknown — 無法判斷因特網 connectivity。
您可以檢查裝置目前正在使用哪種類型的連線設定檔:
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();
}
}
限制
請務必知道 Internet ,有可能報告 NetworkAccess ,但無法存取 Web。 由於在每個平臺上的運作方式 connectivity ,它只能保證連線可供使用。 例如,裝置可能連線到Wi-Fi網路,但路由器與因特網中斷連線。 在此實例 Internet
中可能會回報,但無法使用作用中的連線。