다음을 통해 공유


Connectivity

샘플을 찾아봅니다. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) IConnectivity 인터페이스를 사용하여 디바이스의 네트워크 접근성을 검사하는 방법을 설명합니다. 네트워크 연결에서 인터넷에 액세스할 수 있습니다. 디바이스에는 Bluetooth, 셀룰러 또는 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 매니페스트를 업데이트합니다.

    Platforms/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 Portal이 있음을 의미합니다. 포털을 사용하여 인증 자격 증명을 제공하면 인터넷 액세스가 부여됩니다.
  • 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();
    }
}

제한 사항

보고 NetworkAccess 할 수 Internet 있지만 웹에 대한 모든 권한을 사용할 수 없다는 것을 아는 것이 중요합니다. 각 플랫폼에서 작동하는 방식 connectivity 때문에 연결을 사용할 수 있도록 보장할 수 있습니다. 예를 들어 디바이스가 Wi-Fi 네트워크에 연결될 수 있지만 라우터는 인터넷에서 연결이 끊어집니다. 이 인스턴스 Internet 에서는 보고될 수 있지만 활성 연결을 사용할 수 없습니다.