ConnectivityManager getNetworkInfo (int) 추천하지 않습니다


144

그러나 compileSdkVersion 23 사용하여 9까지 지원합니다.

getNetworkInfo(int)(23)에서 사용되지 않는 된 제안은 사용하는 것이 었 getAllNetworks()하고 getNetworkInfo(Network)대신. 그러나이 두 가지 모두 최소 API 21이 필요합니다.

이를 지원할 수있는 지원 패키지에 사용할 수있는 클래스가 있습니까?

나는 해결책이 이전 에 제안되었다는 것을 알고 있지만, 9의 최소 API 요구 사항에 대한 문제는 문제를 일으킨다.


런타임에 빌드 버전을 확인하고 적절한 방법을 사용할 수 있습니다
stinepike

1
그래도 더 이상 사용되지 않는 경고가 발생합니까?
kyleED

Android Nougat 아래 및 위의 API 메소드를 캡슐화하는 ConnectivityObserver 클래스 를 확인하십시오 .
JJD

답변:


166

당신이 사용할 수있는:

getActiveNetworkInfo ();

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { 
    // connected to the internet
    if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
        // connected to wifi
    } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
        // connected to mobile data
    }
} else {
    // not connected to the internet
}

또는 스위치 케이스

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { 
    // connected to the internet
    switch (activeNetwork.getType()) {
        case ConnectivityManager.TYPE_WIFI:
            // connected to wifi
            break;
        case ConnectivityManager.TYPE_MOBILE:
            // connected to mobile data
            break;
        default:
            break;
    }
} else {
    // not connected to the internet
}

1
@ShirishHerwade-이 경우 방송 수신기가 필요하지 않습니다. 컨텍스트 참조가 포함 된 경우 getActiveNetworkInfo ()를 자체 메소드에 배치 할 수 있습니다.
치즈 빵

1
@TheIT-예 doc은 "네트워크 트래픽을 시작하기 전에 항상 isConnected ()를 확인해야합니다"라고 말합니다. 이 솔루션은 트래픽을 시작하지 않으며 더 이상 사용되지 않는 getNetworkInfo () 호출에 대한 솔루션 만 제공했습니다.
치즈 빵

7
Android 9, SDK 28부터는 더 이상 사용되지 않습니다.
Zbarcea Christian

32
activeNetwork.getType()더 이상 사용되지 않으며 사용되지 ConnectivityManager.TYPE_WIFI않습니다
Godwin

7
교체는 지금cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
23시

63

2018 년 10 월부터는 답변이 더 이상 사용되지 않습니다.

getType()및 유형 자체는 이제 API 레벨 28에서 더 이상 사용되지 않습니다. Javadoc에서 :

호출자는 NetworkCapabilities # TRANSPORT * 상수 중 하나를 사용하여 NetworkCapabilities # hasTransport 확인 대신 전환해야합니다.

를 사용하려면 인스턴스를 메소드 NetworkCapabilities에 전달해야합니다 . 해당 인스턴스를 얻으려면 API 레벨 23에 추가 된 호출해야합니다 .NetworkgetNetworkCapabilities()getActiveNetwork()

따라서 현재 Wi-Fi 또는 셀룰러 네트워크에 연결되어 있는지 안전하게 확인하는 올바른 방법은 다음과 같습니다.

public static boolean isNetworkConnected() {
    final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        if (Build.VERSION.SDK_INT < 23) {
            final NetworkInfo ni = cm.getActiveNetworkInfo();

            if (ni != null) {
                return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
            }
        } else {
            final Network n = cm.getActiveNetwork();

            if (n != null) {
                final NetworkCapabilities nc = cm.getNetworkCapabilities(n);

                return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
            }
        } 
    }

    return false; 
}

다른 유형의을 확인할 수도 TRANSPORT있습니다 ( 여기에서 찾을 수 있음) .

중요 사항 : Wi-Fi VPN에 연결되어 있으면 현재 상태가 될 수 있으므로 TRANSPORT_VPN확인해야 할 수도 있습니다.

AndroidManifest 파일에 다음 권한을 추가하는 것을 잊지 마십시오.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

hasTransport (NetworkCapabilities.TRANSPORT_WIFI)가 ni.isConnected () && (ni.getType () == ConnnectivityManager.TYPE_WIFI)와 동일합니까? 내 의미는 hasTransport () 함수도 장치가 연결되어 있는지 또는 연결을 시도하고 있는지 확인하는 것입니까?
비스킷

다시 한 번 NetworkInfo감가 상각 되면 더 이상 사용할 수 없으므로 NetWorkInfo어떻게 대안을 제공합니까?
프레스콧 차티

@PrescottChartier이 코드 스 니펫은 SDK <23 기기의 NetworkInfo에만 액세스
Tom

59

2020 년 2 월 업데이트 :

허용 된 답변은에서 더 이상 사용되지 28 (Android P)않지만 대체 방법은에서 작동합니다 23 (Android M). 구형 장치를 지원하기 위해에 도우미 기능을 작성했습니다.

사용하는 방법:

int type = getConnectionType(getApplicationContext());

를 반환하면 코드에서로 int변경할 수 있습니다 enum.

0 : 인터넷을 사용할 수 없습니다 (비행기 모드 또는 Wi-Fi 가입 중일 수 있음).

1 : 셀룰러 (모바일 데이터, 3G / 4G / LTE)

2 : Wi-Fi.

3 : VPN

Kotlin 또는 Java 버전의 도우미 함수를 복사 할 수 있습니다.

코 틀린 :

@IntRange(from = 0, to = 3)
fun getConnectionType(context: Context): Int {
    var result = 0 // Returns connection type. 0: none; 1: mobile data; 2: wifi
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        cm?.run {
            cm.getNetworkCapabilities(cm.activeNetwork)?.run {
                if (hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = 2
                } else if (hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = 1
                } else if (hasTransport(NetworkCapabilities.TRANSPORT_VPN)){
                    result = 3
                }
            }
        }
    } else {
        cm?.run {
            cm.activeNetworkInfo?.run {
                if (type == ConnectivityManager.TYPE_WIFI) {
                    result = 2
                } else if (type == ConnectivityManager.TYPE_MOBILE) {
                    result = 1
                } else if(type == ConnectivityManager.TYPE_VPN) {
                    result = 3
                }
            }
        }
    }
    return result
}

자바:

@IntRange(from = 0, to = 3)
public static int getConnectionType(Context context) {
    int result = 0; // Returns connection type. 0: none; 1: mobile data; 2: wifi
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = 2;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = 1;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
                    result = 3;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = 2;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = 1;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_VPN) {
                    result = 3;
                }
            }
        }
    }
    return result;
}

2
결과가 2 개이므로 정수를 반환하는 대신 부울을 사용하는 것이 좋습니다.
Christian

3
@Christian As이 헬퍼 기능은 3 개 가지 상태를 반환 옐로우 섹션에서 설명 : No Internet, CellularWi-Fi. 연결 유형에 신경 쓰지 않으면 응용 프로그램에 맞게 코드를 자유롭게 수정하십시오.
user1032613

1
위의 해결책에 대한 의견은 "Wi-Fi 및 VPN에 연결된 경우 현재 상태는 TRANSPORT_VPN 일 수 있으므로 확인하고 싶을 수도 있습니다."?
David

1
@Lukas 당신 은 원시 Boolean클래스 대신 래퍼 클래스 를 사용한다면 조심해야합니다 boolean. if 문에서 확인을 추가해야합니다 null. 또한 내일 NetworkCapabilities의 또 다른 새로운 전송 모드가 도입되면 분기에 정수를 사용하면 도움이되며 스위치 케이스로 갈 수 있습니다.
Shadow Droid

3
이 지속적인 지원 중단주기에 질려 있습니다
Segun Wahaab

16

업데이트 된 답변 (19 : 07 : 2018) :

이 방법은 인터넷 연결이 가능한지 확인하는 데 도움이됩니다.

public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (connectivityManager != null) {
        NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
        return (activeNetwork != null && activeNetwork.isConnectedOrConnecting());
    } else {
        return false;
    }
}

이전 답변 :

최상의 코드 재사용 연습을 위해 Cheese Bread 답변을 개선하십시오.

public static boolean isNetworkAvailable(Context context) {
    int[] networkTypes = {ConnectivityManager.TYPE_MOBILE,
            ConnectivityManager.TYPE_WIFI};
    try {
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        for (int networkType : networkTypes) {
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (activeNetworkInfo != null &&
                    activeNetworkInfo.getType() == networkType)
                return true;
        }
    } catch (Exception e) {
        return false;
    }
    return false;
}

코드는 Util 클래스에 배치 할 수 있으며 응용 프로그램의 어느 부분에서나 전화가 Wi-Fi 또는 모바일 인터넷을 통해 인터넷에 연결되어 있는지 확인하는 데 사용할 수 있습니다.


3
활성 네트워크 가져 오기를 for 루프 외부로 옮기는 것이 좋습니다.
shtolik

20
activeNetwork.isConnectedOrConnecting()더 이상 사용되지 않습니다
MHSFisher

1
activeNetwork.isConnectedOrConnecting ()을 activeNetwork.isConnected로 변경
Murillo Comino

이제 NetworkInfo가 더 이상 사용되지 않습니다. 다시 업데이트해야합니다!
Scott Biggs

13

수락 된 답변은 버전 28에서 더 이상 사용되지 않으므로 다음은 프로젝트에서 사용중인 솔루션입니다.

연결 유형을 반환합니다. false : 인터넷 연결이 없습니다. true : 모바일 데이터 || 와이파이

public static boolean isNetworkConnected(Context context) { 
    boolean result = false; 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = true;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = true;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = true;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = true;
                }
            }
        }
    }
    return result;
}

2
activeNetwork.getType ()도 더 이상 사용되지 않습니다. activeNetwork.isConnected ()를 사용할 수 있습니다.
Aman Verma

11

API.15에서 API.29까지 지원하는 2020 년 3 월 현재이 답변에 대한 업데이트가 있습니다. 원래 답변에 따라 찾을 수 있습니다.

2019 년 2 월 답변

온라인 상태인지 확인하려면 :

boolean isOnline() {
    // Checking internet connectivity
    ConnectivityManager connectivityMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = null;
    if (connectivityMgr != null) {
        activeNetwork = connectivityMgr.getActiveNetworkInfo();
    }
    return activeNetwork != null;
}

안드로이드 M 전후에 인터넷 연결 유형을 얻으려면

void internetType() {
    // Checking internet connectivity
    ConnectivityManager connectivityMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = null;
    if (connectivityMgr != null) {
        activeNetwork = connectivityMgr.getActiveNetworkInfo();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            NetworkCapabilities nc = connectivityMgr.getNetworkCapabilities(connectivityMgr.getActiveNetwork());
            if (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                // connected to mobile data
            } else if (nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                // connected to wifi
            }
        } else {
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                // connected to wifi
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                // connected to mobile data
            }
        }
    }
}

모든 경우에 네트워크 상태에 액세스 할 수있는 권한이 필요합니다

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2020 년 3 월 업데이트

마찬가지로 NetworkInfo지금부터 더 이상 사용되지 않으며 API 29로 우리가 사용해야하는 ConnectivityManager.NetworkCallback네트워크 상태 변화 onAvailable()onLost()콜백.

용법:

풍모

  • LifeCycle은 LifecycleObserver일부 정리 작업을 수행하여 메모리 누수를 피하도록 구현함으로써 의식이 onDestroy()있습니다.
  • API 29 (Ice Cream Sandwich)부터 API 29 (Android Q)까지 지원
  • API의 API (21)에 종래의 경우, 사용 상황에 기초 BoradcastReceiver하고 NetworkInfo, 그리고 사용 ConnectivityManager.NetworkCallbackAPI (21) 및 상기 대.
  • WiFi와 셀룰러 네트워크가 모두 켜져 있으면 셀룰러 네트워크로 전환하는 동안 WiFi 연결이 끊어지면 연결 리스너가 중단되지 않습니다.
  • 셀룰러 네트워크가 켜져 있으면 WiFi가 연결되어 활성 네트워크 일 때 연결 리스너가 중단되지 않습니다 (이것이 선호하는 네트워크이므로).
  • 라이브러리를 사용하려는 경우이 권한을 포함 할 필요가 없습니다 android.permission.ACCESS_NETWORK_STATE. 유틸리티 클래스를 사용하려면 포함시켜야합니다.

기능

  • 현재 연결 상태 (온라인 / 오프라인)를 가져옵니다.
  • 인터넷 연결을 지속적으로 확인 / 청취하고 장치가 오프라인 또는 온라인 상태가되면 콜백을 트리거합니다.
  • 활성 인터넷 연결 유형 (WiFi 또는 Cellular)을 가져옵니다.
  • 사용 가능한 모든 네트워크 유형 (WiFi 또는 Cellular)을 가져옵니다. >> API 21 이상에서만 지원
  • 사용 가능한 모든 네트워크 수 확보 >> API 21 이상에서만 지원
@RequiresApi(api = Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
public class ConnectionUtil implements LifecycleObserver {

    private static final String TAG = "LOG_TAG";
    private ConnectivityManager mConnectivityMgr;
    private Context mContext;
    private NetworkStateReceiver mNetworkStateReceiver;

    /*
     * boolean indicates if my device is connected to the internet or not
     * */
    private boolean mIsConnected = false;
    private ConnectionMonitor mConnectionMonitor;


    /**
     * Indicates there is no available network.
     */
    private static final int NO_NETWORK_AVAILABLE = -1;


    /**
     * Indicates this network uses a Cellular transport.
     */
    public static final int TRANSPORT_CELLULAR = 0;


    /**
     * Indicates this network uses a Wi-Fi transport.
     */
    public static final int TRANSPORT_WIFI = 1;


    public interface ConnectionStateListener {
        void onAvailable(boolean isAvailable);
    }


    public ConnectionUtil(Context context) {
        mContext = context;
        mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        ((AppCompatActivity) mContext).getLifecycle().addObserver(this);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mConnectionMonitor = new ConnectionMonitor();
            NetworkRequest networkRequest = new NetworkRequest.Builder()
                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .build();
            mConnectivityMgr.registerNetworkCallback(networkRequest, mConnectionMonitor);
        }

    }


    /**
     * Returns true if connected to the internet, and false otherwise
     *
     * <p>
     * NetworkInfo is deprecated in API 29
     * https://developer.android.com/reference/android/net/NetworkInfo
     * <p>
     * getActiveNetworkInfo() is deprecated in API 29
     * https://developer.android.com/reference/android/net/ConnectivityManager#getActiveNetworkInfo()
     * <p>
     * getNetworkInfo(int) is deprecated as of API 23
     * https://developer.android.com/reference/android/net/ConnectivityManager#getNetworkInfo(int)
     */
    public boolean isOnline() {

        mIsConnected = false;

        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
            // Checking internet connectivity
            NetworkInfo activeNetwork = null;
            if (mConnectivityMgr != null) {
                activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
            }
            mIsConnected = activeNetwork != null;

        } else {
            Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)

            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null) {
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))
                        mIsConnected = true;
                }
            }
        }

        return mIsConnected;

    }


    /**
     * Returns
     * <p> <p>
     * <p><p> NO_NETWORK_AVAILABLE >>> when you're offline
     * <p><p> TRANSPORT_CELLULAR >> When Cellular is the active network
     * <p><p> TRANSPORT_WIFI >> When Wi-Fi is the Active network
     * <p>
     */
    public int getActiveNetwork() {

        NetworkInfo activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
        if (activeNetwork != null)

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                NetworkCapabilities capabilities = mConnectivityMgr.getNetworkCapabilities(mConnectivityMgr.getActiveNetwork());
                if (capabilities != null)
                    if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                        // connected to mobile data
                        return TRANSPORT_CELLULAR;

                    } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                        // connected to wifi
                        return TRANSPORT_WIFI;
                    }

            } else {
                if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { // Deprecated in API 28
                    // connected to mobile data
                    return TRANSPORT_CELLULAR;

                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { // Deprecated in API 28
                    // connected to wifi
                    return TRANSPORT_WIFI;
                }
            }
        return NO_NETWORK_AVAILABLE;
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public int getAvailableNetworksCount() {

        int count = 0;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)
            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null)
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
                        count++;
            }

        }

        return count;
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public List<Integer> getAvailableNetworks() {

        List<Integer> activeNetworks = new ArrayList<>();

        Network[] allNetworks; // added in API 21 (Lollipop)
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            allNetworks = mConnectivityMgr.getAllNetworks();
            for (Network network : allNetworks) {
                NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
                if (networkCapabilities != null) {
                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI))
                        activeNetworks.add(TRANSPORT_WIFI);

                    if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
                        activeNetworks.add(TRANSPORT_CELLULAR);

                }
            }
        }

        return activeNetworks;
    }


    public void onInternetStateListener(ConnectionStateListener listener) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            mNetworkStateReceiver = new NetworkStateReceiver(listener);
            IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
            mContext.registerReceiver(mNetworkStateReceiver, intentFilter);

        } else {
            mConnectionMonitor.setOnConnectionStateListener(listener);
        }
    }


    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.d(TAG, "onDestroy");
        ((AppCompatActivity) mContext).getLifecycle().removeObserver(this);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (mConnectionMonitor != null)
                mConnectivityMgr.unregisterNetworkCallback(mConnectionMonitor);
        } else {
            if (mNetworkStateReceiver != null)
                mContext.unregisterReceiver(mNetworkStateReceiver);
        }

    }


    public class NetworkStateReceiver extends BroadcastReceiver {

        ConnectionStateListener mListener;

        public NetworkStateReceiver(ConnectionStateListener listener) {
            mListener = listener;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getExtras() != null) {

                NetworkInfo activeNetworkInfo = mConnectivityMgr.getActiveNetworkInfo(); // deprecated in API 29

                /*
                 * activeNetworkInfo.getState() deprecated in API 28
                 * NetworkInfo.State.CONNECTED deprecated in API 29
                 * */
                if (!mIsConnected && activeNetworkInfo != null && activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
                    Log.d(TAG, "onReceive: " + "Connected To: " + activeNetworkInfo.getTypeName());
                    mIsConnected = true;
                    mListener.onAvailable(true);

                } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
                    if (!isOnline()) {
                        mListener.onAvailable(false);
                        mIsConnected = false;
                    }

                }

            }
        }
    }


    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public class ConnectionMonitor extends ConnectivityManager.NetworkCallback {

        private ConnectionStateListener mConnectionStateListener;

        void setOnConnectionStateListener(ConnectionStateListener connectionStateListener) {
            mConnectionStateListener = connectionStateListener;
        }

        @Override
        public void onAvailable(@NonNull Network network) {

            if (mIsConnected)
                return;

            Log.d(TAG, "onAvailable: ");

            if (mConnectionStateListener != null) {
                mConnectionStateListener.onAvailable(true);
                mIsConnected = true;
            }

        }

        @Override
        public void onLost(@NonNull Network network) {

            if (getAvailableNetworksCount() == 0) {
                mConnectionStateListener.onAvailable(false);
                mIsConnected = false;
            }

        }

    }

}

@Rasel 업데이트 된 답변을 확인하십시오, 도움이되기를 바랍니다.
Zain

사용자가 Wi-Fi 및 모바일 데이터에 동시에 연결되어 있고 그 중 하나에서 연결이 끊어지면 onLost호출됩니다. onLost장치가 인터넷 연결을 잃어버린 것은 아니지만 네트워크에서 연결이 끊어 졌음을 의미합니다.
Gokhan Arik

@Gokhan Arik .. 좋은 캐치 내가 그것을 해결하기 위해 노력하고 있습니다
Zain


@GokhanArik 도와 주셔서 감사합니다 .. 방금 답변을 업데이트하고 API 사용을 확장했습니다. plz는 버그를 발견하면 알려주십시오
Zain

4

네트워크가 인터넷에 연결되어 있는지 확인하는 것이 좋습니다.

@Suppress("DEPRECATION")
fun isNetworkAvailable(context: Context): Boolean {
    try {
        val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        return if (Build.VERSION.SDK_INT > 22) {
            val an = cm.activeNetwork ?: return false
            val capabilities = cm.getNetworkCapabilities(an) ?: return false
            capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
        } else {
            val a = cm.activeNetworkInfo ?: return false
            a.isConnected && (a.type == ConnectivityManager.TYPE_WIFI || a.type == ConnectivityManager.TYPE_MOBILE)
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return false
}

확인을 원할 수도 있습니다 NetworkCapabilities.NET_CAPABILITY_VALIDATED.
JJD

3

코 틀린 버전 :

fun isInternetOn(context: Context): Boolean {
   val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
   val activeNetwork = cm?.activeNetworkInfo
   return activeNetwork != null && activeNetwork.isConnected
}

3

치즈 빵 제안 , 사용 ) (getActiveNetworkInfo를

getActiveNetworkInfo

API 레벨 1에 추가됨

NetworkInfo getActiveNetworkInfo ()

현재 활성화 된 기본 데이터 네트워크에 대한 세부 정보를 반환합니다. 연결되면이 네트워크는 발신 연결의 기본 경로입니다. 네트워크 트래픽을 시작하기 전에 항상 isConnected ()를 확인해야합니다. 기본 네트워크가 없으면 null을 반환 할 수 있습니다. 이 방법을 사용하려면 호출자가 ACCESS_NETWORK_STATE 권한을 보유해야합니다. 현재 기본 네트워크에 대한 NetworkInfo 네트워크 정보 객체를 반환하거나 현재 활성화 된 기본 네트워크가없는 경우 null을 반환합니다.

참조 : Android Studio

 public final boolean isInternetOn() {

    // get Connectivity Manager object to check connection
    ConnectivityManager connec =
            (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);

    // Check for network connections
    if ( connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTED ||
            connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.CONNECTING ) {

        // if connected with internet

        Toast.makeText(this, connec.getActiveNetworkInfo().getTypeName(), Toast.LENGTH_LONG).show();
        return true;

    } else if (
            connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED ||
                    connec.getActiveNetworkInfo().getState() == android.net.NetworkInfo.State.DISCONNECTED  ) {

        Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show();
        return false;
    }
    return false;
}

안전한 사용을 위해 이제 메소드를 호출하십시오.

try {
    if (isInternetOn()) { /* connected actions */ }
    else { /* not connected actions */ }
} catch (Exception e){
  Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}

그리고 다음을 추가하는 것을 잊지 마십시오 :

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

유용합니다 감사합니다. 우리는 네트워크 상태를 확인할 때 경우 무선 랜과 데이터를 모두 그 시간 응용 프로그램 충돌을 오프하지만 잡기가 문제 .. 해결하려고
Rucha 밧 조시

그러나 특정 유형의 네트워크가 있는지 확인하려는 경우에는 작동하지 않습니다. 예를 들어getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
m0skit0

3
getState () 추천하지 않습니다!
Diego Venâncio

더 이상 사용되지 않는 몇 가지 지침!
Scott Biggs

2

안전한면에 있으려면 방법을 사용하는 것이 좋습니다.

NetworkInfo.isConnected ()

전체 방법은 다음과 같습니다.

/**
 * Checking whether network is connected
 * @param context Context to get {@link ConnectivityManager}
 * @return true if Network is connected, else false
 */
public static boolean isConnected(Context context){
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        int networkType = activeNetwork.getType();
        return networkType == ConnectivityManager.TYPE_WIFI || networkType == ConnectivityManager.TYPE_MOBILE;
    } else {
        return false;
    }
}

9
activeNetwork.getType()더 이상 사용되지 않으며 사용되지 ConnectivityManager.TYPE_WIFI 않습니다
Godwin

2

현재 네트워크가 최신 Android 버전에서 셀룰러를 사용 중인지 확인하는 방법은 다음과 같습니다.

val isCellular: Boolean get() {
    val cm = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
    } else {
        cm.activeNetworkInfo?.type == ConnectivityManager.TYPE_MOBILE
    }
}

2

(거의) 모든 답변은 Android P에서 더 이상 사용되지 않으므로 여기에 C#솔루션 이 있습니다 ( Java 개발자가 쉽게 따라 할 수 있습니다 )

public bool IsOnline(Context context)
{
    var cm = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);

    if (cm == null) return false;

    if (Build.VERSION.SdkInt < BuildVersionCodes.M)
    {
        var ni = cm.ActiveNetworkInfo;

        if (ni == null) return false;

        return ni.IsConnected && (ni.Type == ConnectivityType.Wifi || ni.Type == ConnectivityType.Mobile);
    }

    return cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Wifi)
        || cm.GetNetworkCapabilities(cm.ActiveNetwork).HasTransport(Android.Net.TransportType.Cellular);
}   

여기서 핵심은 Android.Net.TransportType


이것에 대한 Aaaannnndddd는 폐기되었습니다!
프레스콧 차티

@PrescottChartier는 어떤 버전입니까?
Mehdi Dehghani

2

인터넷 연결을 두 번 이상 확인해야 할 수도 있습니다. 따라서의 확장 방법으로 코드 블록을 작성하면 더 쉬울 것입니다 Context. 다음은 내 도우미의 확장입니다 ContextFragment.

인터넷 연결 확인

fun Context.hasInternet(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    return if (Build.VERSION.SDK_INT < 23) {
        val activeNetworkInfo = connectivityManager.activeNetworkInfo
        activeNetworkInfo != null && activeNetworkInfo.isConnected
    } else {
        val nc = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        if (nc == null) {
            false
        } else {
            nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
                    nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
        }
    }
}

다른 확장

fun Context.hasInternet(notifyNoInternet: Boolean = true, trueFunc: (internet: Boolean) -> Unit) {
    if (hasInternet()) {
        trueFunc(true)
    } else if (notifyNoInternet) {
        Toast.makeText(this, "No Internet Connection!", Toast.LENGTH_SHORT).show()
    }
}

fun Context.hasInternet(
    trueFunc: (internet: Boolean) -> Unit,
    falseFunc: (internet: Boolean) -> Unit
) {
    if (hasInternet()) {
        trueFunc(true)
    } else {
        falseFunc(true)
    }
}

fun Fragment.hasInternet(): Boolean = context!!.hasInternet()

fun Fragment.hasInternet(notifyNoInternet: Boolean = true, trueFunc: (internet: Boolean) -> Unit) =
    context!!.hasInternet(notifyNoInternet, trueFunc)

fun Fragment.hasInternet(
    trueFunc: (internet: Boolean) -> Unit, falseFunc: (internet: Boolean) -> Unit
) = context!!.hasInternet(trueFunc, falseFunc)

2

인터넷 사용 가능 여부 확인

@RequiresPermission(allOf = [
    Manifest.permission.ACCESS_NETWORK_STATE, 
    Manifest.permission.INTERNET
])
fun isInternetAvailable(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    val activeNetworkInfo = connectivityManager!!.activeNetworkInfo
    return activeNetworkInfo != null && activeNetworkInfo.isConnected
}

2

아래의 android M (API 28)에서 connectivityManager.getActiveNetwork ()를 찾을 수 없습니다. networkInfo.getState ()는 안드로이드 L보다 더 이상 사용되지 않습니다.

따라서 최종 답변은 다음과 같습니다.

public static boolean isConnectingToInternet(Context mContext) {
    if (mContext == null) return false;

    ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager != null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            final Network network = connectivityManager.getActiveNetwork();
            if (network != null) {
                final NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(network);

                return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ||
                        nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
            }
        } else {
            NetworkInfo[] networkInfos = connectivityManager.getAllNetworkInfo();
            for (NetworkInfo tempNetworkInfo : networkInfos) {
                if (tempNetworkInfo.isConnected()) {
                    return true;
                }
            }
        }
    }
    return false;
}

1
getActiveNetwork ()가 M 아래의 Android에서는 발견되지 않지만 코드는 Lollipop에서 사용한다고 말합니다!?
3c71

2

많은 답변이 여전히 23 이하의 getNetworkType을 사용하지만 더 이상 사용되지 않습니다. 장치가 인터넷에 연결되어 있는지 확인하려면 아래 코드를 사용하십시오.

public static boolean isNetworkConnected(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm != null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
        } else {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            return activeNetwork != null && activeNetwork.isConnected();
        }
    }

    return false;
}

..

그리고 Manifest에이 줄을 추가하는 것을 잊지 마십시오

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

1

게시 된 답변은 활성 네트워크 만 쿼리 할 수 ​​있으므로 활성 네트워크 NetworkInfo(예 : Wi-Fi 네트워크)뿐만 아니라 모든 네트워크에 액세스 하는 방법은 다음과 같습니다 (죄송합니다, Kotlin 코드)

(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).run {
    allNetworks.find { getNetworkInfo(it).type == ConnectivityManager.TYPE_WIFI }?.let { network -> getNetworkInfo(network) }
//    getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable // This is the deprecated API pre-21
}

API 21 이상과 권한이 필요합니다 android.permission.ACCESS_NETWORK_STATE


1
currentNetwork.getType () 및 ConnectivityManager.TYPE_WIFI는 모두 API 28에서 더 이상 사용되지 않습니다.
Abushawish

@Abushawish API 28에 권장되는 솔루션은 무엇입니까?
tmm1

교체는 지금cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
23시

1

Kotlin을 사용하여 Android에서 인터넷 연결을 확인하는 데 사용할 수있는 NetManager

minSdkVersion> = 23 을 사용하는 경우

class NetManager @Inject constructor(var applicationContext: Context) {
    val isConnectedToInternet: Boolean?
        get() = with(
            applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)
                    as ConnectivityManager
        ) {
            isConnectedToInternet()
        }
}

fun ConnectivityManager.isConnectedToInternet() = isConnected(getNetworkCapabilities(activeNetwork))

fun isConnected(networkCapabilities: NetworkCapabilities?): Boolean {
    return when (networkCapabilities) {
        null -> false
        else -> with(networkCapabilities) { hasTransport(TRANSPORT_CELLULAR) || hasTransport(TRANSPORT_WIFI) }
    }
}

minSdkVersion <23 을 사용하는 경우

class NetManager @Inject constructor(var applicationContext: Context) {
    val isConnectedToInternet: Boolean?
        get() = with(
            applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)
                    as ConnectivityManager
        ) {
            isConnectedToInternet()
        }
}

fun ConnectivityManager.isConnectedToInternet(): Boolean = if (Build.VERSION.SDK_INT < 23) {
    isConnected(activeNetworkInfo)
} else {
    isConnected(getNetworkCapabilities(activeNetwork))
}


fun isConnected(network: NetworkInfo?): Boolean {
    return when (network) {
        null -> false
        else -> with(network) { isConnected && (type == TYPE_WIFI || type == TYPE_MOBILE) }
    }
}

fun isConnected(networkCapabilities: NetworkCapabilities?): Boolean {
    return when (networkCapabilities) {
        null -> false
        else -> with(networkCapabilities) { hasTransport(TRANSPORT_CELLULAR) || hasTransport(TRANSPORT_WIFI) }
    }
}

1

https://www.agnosticdev.com/content/how-detect-network-connectivity-android

이 튜토리얼을 따르면 누구나 답을 찾는 데 도움이됩니다.

참고 networkInfo는 더 이상 사용되지 않으므로 getApplicationContext ()를 매개 변수로 전달하는 @vidha 응답이있는 isNetworkReacheable ()입니다.

  public static boolean isNetworkReacheable(Context context) {
    boolean result = false;
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (cm != null) {
            NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    result = true;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    result = true;
                }
            }
        }
    } else {
        if (cm != null) {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
                // connected to the internet
                if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                    result = true;
                } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                    result = true;
                }
            }
        }
    }
    return result;
}

0
public boolean isConnectedToWifi(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager == null) {
        return false;
    }

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
        Network network = connectivityManager.getActiveNetwork();
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities == null) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
    } else {
        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo == null) {
            return false;
        }
        return networkInfo.isConnected();
    }
}

0

이것은 Kotlin에서 저에게 효과적입니다. 많은 API는 Network Manager 클래스에서 더 이상 사용되지 않으므로 아래 답변은 모든 API 지원을 다룹니다.

fun isNetworkAvailable(context: Context): Boolean {
    var result = false
    (context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                result = isCapableNetwork(this,this.activeNetwork)
            } else {
                val networkInfos = this.allNetworks
                for (tempNetworkInfo in networkInfos) {
                    if(isCapableNetwork(this,tempNetworkInfo))
                        result =  true
                }
            }
        }

    return result
}

fun isCapableNetwork(cm: ConnectivityManager,network: Network?): Boolean{
     cm.getNetworkCapabilities(network)?.also {
        if (it.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            return true
        } else if (it.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
            return true
        }
    }
    return false
}

당신은 또한 아래에 추가 할 것입니다

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

0

아래 코드는 모든 API에서 작동합니다. (Kotlin)

그러나 getActiveNetworkInfo ()는 API 29에서만 사용되지 않으며 모든 API에서 작동하므로 29 이하의 모든 API에서 사용할 수 있습니다.

fun isInternetAvailable(context: Context): Boolean {
            var result = false
            val connectivityManager =
                context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val networkCapabilities = connectivityManager.activeNetwork ?: return false
                val actNw =
                    connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
                result = when {
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                    actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                    else -> false
                }
            } else {
                connectivityManager.run {
                    connectivityManager.activeNetworkInfo?.run {
                        result = when (type) {
                            ConnectivityManager.TYPE_WIFI -> true
                            ConnectivityManager.TYPE_MOBILE -> true
                            ConnectivityManager.TYPE_ETHERNET -> true
                            else -> false
                        }

                    }
                }
            }

            return result
        }

0

이 같은:

public boolean hasConnection(final Context context){
    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNW = cm.getActiveNetworkInfo();
    if (activeNW != null && activeNW.isConnected())
    {
        return true;
    }
    return false;
}

그리고 메인 프로그램 본문에서 :

if(hasConnection(this)) {
    Toast.makeText(this, "Active networks OK ", Toast.LENGTH_LONG).show();
    getAccountData(token, tel);
}
else  Toast.makeText(this, "No active networks... ", Toast.LENGTH_LONG).show();

0

이것은 Android 10에서도 작동합니다. 인터넷에 연결되어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

private fun isOnline(): Boolean {
        val connectivityManager =
                getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        val capabilities =
                connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
        if (capabilities != null) {
            when {
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
                    return true
                }
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
                    return true
                }
                capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> {
                    Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
                    return true
                }
            }
        }
        return false
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.