偵測網路連線能力
行動裝置會使用 Wi-Fi 和行動數據技術連線到網際網路。 此相依性表示使用者在使用您的應用程式時,可能會失去網際網路連線。 如果您未新增程式碼來防範這種可能性,您的應用程式可能會停止回應,並為使用者提供不愉快的體驗。
在此單元中,您會藉由偵測使用者網際網路連線中斷的時機來保護您的應用程式。 當我們開始取用 REST Web 服務時,此資訊就會變得很重要。
為什麼要在行動應用程式上偵測網路連線能力?
在行動應用程式上偵測是否有網際網路連線非常重要,因為行動裝置的網路連線時常會中斷。 這可能是因為網路服務提供者的涵蓋率不佳,或是處於收訊不良或無訊號的環境,例如隧道、深谷或高山。 網路連線也有不同的類型。 如果您身處具有 WiFi 連線的環境中,通常頻寬會比使用行動數據還要高。 或許您仍可連線至網際網路,但相較於 WiFi 連線,有些作業 (例如串流影片內容) 在行動數據連線下就可能會更慢 (而且耗費資源)。
由於行動裝置有這些挑戰,所以您必須撰寫程式碼來保護行動裝置不受到影響。 如果您沒有這麼做,而且您的應用程式嘗試執行使用網際網路的作業,您的應用程式可能會停止回應。
即使您的應用程式無法連線到網際網路,您也會希望提供良好的使用者體驗。 如果您的應用程式因為沒有網際網路服務即停止運作,使用者可能會感到困惑。 最佳做法是提供資訊給您的使用者。 請告訴他們您沒有網際網路連線,而且如果沒有網際網路連線,您的應用程式可能無法完整執行。 請見下圖呈現的範例:
在此範例中,應用程式開發人員會通知使用者他們沒有網際網路連線,且他們應該嘗試連線至 Wi-Fi。
偵測網路連線能力
若要在 .NET MAUI 應用程式中檢查網路連線能力,請使用 Connectivity
類別。 此類別會公開一個稱為 NetworkAccess
的屬性和稱為 ConnectivityChanged
的事件。 您可以使用這些成員來偵測網路變更。
您可以透過另一個稱為 Current
的屬性來存取 NetworkAccess
屬性。 此為 Connectivity
用來存取平台專用實作的機制。
NetworkAccess
屬性會傳回 NetworkAccess
列舉的值。 列舉有五個值:ConstrainedInternet
、Internet
、Local
、None
和 Unknown
。 如果 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
事件可讓您撰寫能偵測網路狀態變更的應用程式,並且根據不同環境的可用功能輕鬆進行調整。