|
안드로이드(Android) 단말기에서 ConnectivityManager 를 통해 실시간 네트웍 상태 파악하기 |
|
개발환경 : JDK 1.5, Android GoogleAPI 2.1 , eclipse-galileo, window XP |
이 예제는 단말기에서 WIFI, 3G 가 되는지에 대한 체크를 위한 것이다.
두가지 정보를 체크할것이다. 하나는 네트웍을 사용할 시점에 WIFI, 3G 가
사용가능한지에 대한 체크이며 다른 하나는 네트웍상태가 바뀌었을 때
상태변화에 따른 작업을 하기 위한 소스 작업이다.
|
(1) 네트웍을 사용할 시점에서의 체크 |
먼저 permission 을 설정한다. 네트웍을 사용하기 위한 permission 은 아래와같다.
이 내용을 AndroidManifest.xml 에 추가한다. INTERNET 만 추가하면 안된다.
ACCESS_NETWORK_STATE 도 추가하기 바란다.
다음은 ConnectivityManager 객체를 통해 WIFI 와 3G 상태를 체크할수 있는
객체를 반환해서 상태를 체크한다ConnectivityManager manager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
WIFI, 3G 인지 구분없이 네트웍 연결상태가 제대로 되었는지에 대한 소스는
아래와 같다. isConnectionted 함수를 써서 확인한다.ConnectivityManager manager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobile.isConnected() || wifi.isConnected()){
// WIFI, 3G 어느곳에도 연결되지 않았을때
Log.d(TAG, "Network connect success");
}else{
Log.d(TAG, "Network connect fail");
}
현재 위의 소스를 돌여서 나온 MOBILE과 WIFI 의 상태값에 대한 내용이다.
인터넷선이 연결된 컴퓨터에서 테스트 했으니 당연 MOBILE 만 될것이다.
MOBILE(3G) 디버그 상태값WIFI 상태 디버그 상태값
그럼 MOBILE 과 WIFI 둘중 어떤것에 연결되었는지에 대한 상태에 따라 구현 소스가
틀려진다면 어떻게 해야할까? 그것은 ConnectivityManager 의 getActiveNetworkInfo() 로
NetworkInfo 객체를 받은후 getTypeName 으로 체크하면 된다. 리턴값으로 String 을
반환하는데 “MOBILE”, “WIFI” 둘중 하나를 리턴한다.
NetworkInfo ni = manager.getActiveNetworkInfo();
String netname = ni.getTypeName();
if (netname.equals("MOBILE")) {
Log.d(TAG, "Network - > " + netname);
}else{
Log.d(TAG, "Network - > " + netname);
}
|
(2) 실시간 네트웍 상태 변화에 따른 값받기 |
android.content.BroadcastReceiver 클래스를 상속받아 하나 만든다.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.Toast;
public class ConnReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// 네트웍에 변경이 일어났을때 발생하는 부분
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
Toast.makeText(context,"Active Network Type : " + activeNetInfo.getTypeName() , Toast.LENGTH_SHORT).show();
Toast.makeText(context,"Mobile Network Type : " + mobNetInfo.getTypeName() , Toast.LENGTH_SHORT).show();
}
}
}
다음은 AndroidManifest.xml 에 recevier 와 필터를 등록한다. 필터는
android.net.conn.CONNECTIVITY_CHANGE 등록하면 된다. 그리고 receiver에는
상속받아 만든 클래스를 넣는다.
'안드로이드 개발' 카테고리의 다른 글
| iPhone (아이폰) 개발시 DB를 위한 Sqlite3 다루기 (2) (7) | 2010.08.01 |
|---|---|
| iPhone 개발시 text 박스 입력할 때 키패드 사용후 감추기 (0) | 2010.07.31 |
| iPhone(아이폰) DB 개발시 Sqlite3 용 클래스 FMDB (3) | 2010.07.31 |
| Android 에뮬레이터에 apk 파일 설치 (0) | 2010.07.31 |
| 안드로이드(android)에서 java 의 HttpClient 4.0 클래스를 이용한 네트웍 프로그램 구현 (4) | 2010.07.30 |
| 안드로이드 (android) 네트워크 프로그램에서 HttpClient 사용시 Connection Timeout 체크하기 (7) | 2010.07.29 |
| 안드로이드 위젯 컨트롤에 round 적용과 디자인 업그레이드 - Shape Drawable (1) | 2010.07.29 |
| 안드로이드에서 2D 그래픽을 표현하기 위한 예제들 (0) | 2010.07.28 |

