반응형

단말의 상태를 비행기모드로 바꾸면 인터넷이 중단됩니다.

만약 인터넷이 안될 때 앱에서 웹서버의 데이터를 받아와 보여주려고 한다면 어떻게 될까요?

그러면 사용자는 앱을 사용할 수 없게 되는 걸까요?

인터넷이 안 되는 상태에서는 이미 받아놓은 데이터를 보여줄 수도 있습니다.

또는 인터넷이 안되어도 동작하는 화면만 보이도록 할 수도 있습니다.

이렇게 기능을 만들려면 인터넷이 되는 상태인지 아닌지를 구분할 수 있어야 합니다.

필요한 시점에 인터넷 상태를 알아내려면 어떻게 해야 하는지 알아봅시다.



인터넷 연결 상태

인터넷 연결 상태는 크게 연결된 상태와 연결되지 않은 상태로 나눌 수 있습니다.

예를 들어 단말을 비행기모드로 바꾸면 연결되지 않은 상태가 되죠.

연결된 상태는 다시 무선랜으로 연결된 상태와 3G/LTE로 연결된 상태로 나누어볼 수 있습니다.

유선랜으로 연결된 상태가 있을 수도 있지만 대부분 무선랜이나 3G/LTE로 연결하기 때문에 이 정도의 구분만으로도 충분합니다.

 

인터넷 연결 상태 확인하기

연결상태를 확인할 때는 시스템 서비스 객체 중에서 ConnectivityManager 객체를 사용합니다.

시스템 서비스 객체를 참조할 때는 getSystemService 메소드를 사용하므로 다음 코드를 이용해 ConnectivityManager 객체를 참조할 수 있습니다.

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

연결상태를 확인하는 경우가 자주 생긴다면 이 코드를 하나의 클래스로 정의하는 것이 더 편리합니다.

NetworkStatus라는 이름의 클래스를 만들고 그 안에 세 가지 상태를 상수로 정의합니다.

public class NetworkStatus {

    public static final int TYPE_WIFI = 1;
    public static final int TYPE_MOBILE = 2;
    public static final int TYPE_NOT_CONNECTED = 3;

ConnectivityManager를 이용해 확인할 수 있는 인터넷 연결 상태는 연결됨, 연결안됨으로 구분할 수 있는데, 연결된 상태는 다시 무선랜(WiFi)으로 연결된 상태와 광대역망(3G/LTE)으로 연결된 상태로 나누어집니다.

이 상태들을 표현하기 위해 각각 TYPE_WIFI, TYPE_MOBILE, TYPE_NOT_CONNECTED 상수를 정의한 것입니다.

getConnectivityStatus 메소드에서는 이 세 가지 상태 중 하나를 반환합니다.

ConnectivityManager 객체의 getActiveNetworkInfo 메소드를 호출하면 NetworkInfo 객체가 반환되고 그 안에 상태 정보가 있습니다.

public static int getConnectivityStatus(Context context) {
    ConnectivityManager manager = (ConnectivityManager) 
                                                        context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = manager.getActiveNetworkInfo();
    if (networkInfo != null) {
        int type = networkInfo.getType();
        if (type == ConnectivityManager.TYPE_MOBILE) {
            return TYPE_MOBILE;
        } else if (type == ConnectivityManager.TYPE_WIFI) {
            return TYPE_WIFI;
        }
    }

    return TYPE_NOT_CONNECTED;
}

연결상태를 확인할 때는 ACCESS_NETWORK_STATE 권한이 있어야 합니다.

AndroidManifest.xml 파일을 열고 다음 권한을 추가합니다.

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

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기