偵測網路連線能力

已完成

行動裝置會使用 Wi-Fi 和行動數據技術連線到網際網路。 此相依性表示使用者在使用您的應用程式時,可能會失去網際網路連線。 如果您未新增程式碼來防範這種可能性,您的應用程式可能會停止回應,並為使用者提供不愉快的體驗。

在此單元中,您會藉由偵測使用者網際網路連線中斷的時機來保護您的應用程式。 當我們開始取用 REST Web 服務時,此資訊就會變得很重要。

為什麼要在行動應用程式上偵測網路連線能力?

在行動應用程式上偵測是否有網際網路連線非常重要,因為行動裝置的網路連線時常會中斷。 這可能是因為網路服務提供者的涵蓋率不佳,或是處於收訊不良或無訊號的環境,例如隧道、深谷或高山。 網路連線也有不同的類型。 如果您身處具有 WiFi 連線的環境中,通常頻寬會比使用行動數據還要高。 或許您仍可連線至網際網路,但相較於 WiFi 連線,有些作業 (例如串流影片內容) 在行動數據連線下就可能會更慢 (而且耗費資源)。

由於行動裝置有這些挑戰,所以您必須撰寫程式碼來保護行動裝置不受到影響。 如果您沒有這麼做,而且您的應用程式嘗試執行使用網際網路的作業,您的應用程式可能會停止回應。

即使您的應用程式無法連線到網際網路,您也會希望提供良好的使用者體驗。 如果您的應用程式因為沒有網際網路服務即停止運作,使用者可能會感到困惑。 最佳做法是提供資訊給您的使用者。 請告訴他們您沒有網際網路連線,而且如果沒有網際網路連線,您的應用程式可能無法完整執行。 請見下圖呈現的範例:

Screenshot of an app showing a warning about limited network connectivity.

在此範例中,應用程式開發人員會通知使用者他們沒有網際網路連線,且他們應該嘗試連線至 Wi-Fi。

偵測網路連線能力

若要在 .NET MAUI 應用程式中檢查網路連線能力,請使用 Connectivity 類別。 此類別會公開一個稱為 NetworkAccess 的屬性和稱為 ConnectivityChanged 的事件。 您可以使用這些成員來偵測網路變更。

您可以透過另一個稱為 Current 的屬性來存取 NetworkAccess 屬性。 此為 Connectivity 用來存取平台專用實作的機制。

NetworkAccess 屬性會傳回 NetworkAccess 列舉的值。 列舉有五個值:ConstrainedInternetInternetLocalNoneUnknown。 如果 NetworkAccess 屬性傳回 NetworkAccess.None 值,您就知道目前沒有連線到網際網路,所以不應執行網路程式碼。 此機制可跨平台攜帶。 下列程式碼顯示一個範例:

if (Connectivity.Current.NetworkAccess == NetworkAccess.None)
{
    ...
}

ConnectivityChanged 事件也可讓您判斷裝置是否連接至網際網路。 當網路狀態發生變更時,ConnectivityChanged 事件就會自動觸發。 例如,如果您起初有作用中網路連線,最後連線中斷了,系統就會引發 ConnectivityChanged 事件,以通知您此變更。 傳遞至 ConnectivityChanged 事件處理常式的其中一個參數是 ConnectivityChangedEventArgs 物件。 此物件包含稱為 IsConnected 的屬性。 您可以使用 IsConnected 屬性來判斷是否已連線到網際網路。 以下是範例:

Connectivity.Current.ConnectivityChanged += Connectivity_ConnectivityChanged;
...
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
{
    bool stillConnected = e.IsConnected;
}

ConnectivityChanged 事件可讓您撰寫能偵測網路狀態變更的應用程式,並且根據不同環境的可用功能輕鬆進行調整。

知識檢查

1.

下列哪個是執行網路程式碼之前,應該先檢查網際網路連線的最佳理由?

2.

假設您在撰寫一個應用程式,要讓使用者可以在駕車時使用。 如果車輛進入隧道,裝置就可能失去網際網路連線能力。 您應該使用 Connectivity 類別的哪個成員來偵測網路連線能力的變更?