안드로이드 인터넷 연결상태 확인 getNetworkCapabilities

2020. 7. 8. 18:16공부 정리/안드로이드

인터넷 연결을 확인하는 getActiveNetworkInfo가 android10(API 29)에서 deprecated 되었습니다.

그래서 새로운 방법으로 getNetworkCapabilities을 이용한 방법을 정리하려 합니다.

 

https://m.blog.naver.com/PostView.nhn?blogId=jogilsang&logNo=221571963859&proxyReferer=https:%2F%2Fwww.google.com%2F

 

안드로이드 - 와이파이 또는 모바일 통신 연결 구분, 네트워크 인터넷확인

isWIFIConnected() 가 true면 WIFI로 네트워크에 연결된상태이다false면 네트워크연결이 안됬거나...

blog.naver.com

출처에서 제공한 소스인데 정리가 잘 되어 있어 올립니다.

출처에서는 중간에 wifi값을 나누고 result값을 따로 나누었습니다.

public class NetworkStatus {
    public static boolean isWIFIConnected(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 = false;
                    }
                }
            }
         ...

 이렇게 되어 있는데 아래의 방식대로 하면 더 간결하게 볼 수 있습니다.

 

public class NetworkStatus {
    public static boolean isConnected(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) {
                    result = capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                            || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR);
                }
            }
        }

        else {
            if (cm != null) {
                NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                if (activeNetwork != null) {
                    // connected to the internet
                    result = (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
                            || (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE);
                }
            }
        }
        return result;
    }
}

 

 

getActiveNetworkInfo가 android10(API 29)에서 deprecated 되었다는 정보입니다.

https://developer.android.com/reference/android/net/NetworkInfo

 

NetworkInfo  |  Android 개발자  |  Android Developers

 

developer.android.com