안드로이드(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 |