앱을 개발하다보면 사용자가 인터넷에 연결된 상태인지 아닌지 확인해야 할 때가 있다.
예를 들어 넷플릭스나 유튜브를 보면 동영상을 저장하여 오프라인일 때 시청할 수 있는 기능을 제공한다.
인터넷이 가능할 때는 서버로부터 컨텐츠를 가져와 보여주고,
인터넷에 연결되지 않았을 때는 미리 저장된 컨텐츠를 보여주는 것이다.
이와 같은 기능을 구현하기 위해서는 인터넷 연결 상태를 미리 확인할 수 있는 방법이 필요하다.
Source Code
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
먼저 Manifest에 네트워크 상태를 확인할 수 있는 ACCESS_NETWORK_STATE 권한을 등록한다.
package com.juhy.myapplication;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
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;
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;
}
}
다음으로 네트워크 상태들을 저장한 변수와 네트워크 상태를 확인하는 메소드를 포함하는 클래스를 정의해보자.
네트워크 상태를 가져오는 메소드는 어디서든 호출하여 사용할 수 있도록 static으로 정의해주자.
먼저 context의 getSystemService() 메소드를 통해 ConnectivityManager를 가져온다.
그리고 ConnectivityManager 객체의 getActiveNetworkInfo() 함수를 통해 네트워크 상태를 가져온다.
마지막으로 네트워크 상태에 따라 미리 정한 변수를 반환하도록 하자.
int state = NetworkStatus.getConnectivityStatus(getApplicationContext());
switch (state){
case NetworkStatus.TYPE_WIFI:
tv_state.setText("WIFI");
break;
case NetworkStatus.TYPE_MOBILE:
tv_state.setText("MOBILE");
break;
case NetworkStatus.TYPE_NOT_CONNECTED:
tv_state.setText("NOT CONNECTED");
break;
}
이제 네트워크 상태를 확인할 곳에서 NetworkStatus.getConnectivityStatus()를 호출하면 된다.
메소드를 통해 얻어온 상태를 switch문을 통해 분류하여 TextView에 띄워주었다.
와이파이 상태에서 앱 실행 후, 와이파이와 데이터를 차례대로 꺼보았다.
상태가 바뀔 때마다 정상적으로 상태를 가져와 띄워주는 것을 볼 수 있다.
※ 이 코드는 사용자의 Focus가 바뀔 때마다 상태를 확인하여 띄워주었다.
※ 네트워크의 상태가 바뀔 때 자동으로 띄워주게 하고 싶다면 BroadcastReceiver를 사용해야 한다.
Reference
[부스트코스]안드로이드 프로그래밍
'Android > Concepts' 카테고리의 다른 글
MediaPlayer로 Audio와 Video 파일 재생하기 (0) | 2020.05.03 |
---|---|
Camera를 이용하여 사진 촬영 및 저장하기 (1) | 2020.05.02 |
SQLiteOpenHelper 사용하여 DB 수정하기 (0) | 2020.05.01 |
SQLite DB에 데이터 저장하기 (0) | 2020.05.01 |
Glide 라이브러리 사용법 (0) | 2020.04.30 |