分享方式:


Connectivity

Browse sample. 流覽範例

本文說明如何使用 .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 — 沒有可用的連線能力。
  • Unknown — 無法判斷因特網連線能力。

您可以檢查裝置目前正在使用哪種類型的連線設定檔:

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。 由於連線在每個平臺上的運作方式,它只能保證連線可供使用。 例如,裝置可能連線到Wi-Fi網路,但路由器與因特網中斷連線。 在此實例 Internet 中可能會回報,但無法使用作用中的連線。