[출처 : http://mainia.tistory.com/549]

안드로이드(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 도 추가하기 바란다.


1 <uses-permission android:name="android.permission.INTERNET">
2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
3 </uses-permission></uses-permission>

다음은 ConnectivityManager 객체를 통해 WIFI  3G 상태를 체크할수 있는

객체를 반환해서 상태를 체크한다
1 ConnectivityManager manager =
2     (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

WIFI, 3G 인지 구분없이 네트웍 연결상태가 제대로 되었는지에 대한 소스는

아래와 같다. isConnectionted 함수를 써서 확인한다.
01 ConnectivityManager manager =
02    (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
03 NetworkInfo mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
04 NetworkInfo wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
05          
06 if (mobile.isConnected() || wifi.isConnected()){
07       // WIFI, 3G 어느곳에도 연결되지 않았을때
08       Log.d(TAG, "Network connect success");
09 }else{
10       Log.d(TAG, "Network connect fail");
11 }

현재 위의 소스를 돌여서 나온 MOBILE WIFI 의 상태값에 대한 내용이다.

인터넷선이 연결된 컴퓨터에서 테스트 했으니 당연 MOBILE 만 될것이다.

MOBILE(3G) 디버그 상태값

WIFI 상태 디버그 상태값

그럼 MOBILE 과 WIFI 둘중 어떤것에 연결되었는지에 대한 상태에 따라 구현 소스가

틀려진다면 어떻게 해야할까그것은 ConnectivityManager  getActiveNetworkInfo() 

NetworkInfo  객체를 받은후 getTypeName 으로 체크하면 된다리턴값으로 String 

반환하는데 “MOBILE”, “WIFI” 둘중 하나를 리턴한다.

1 NetworkInfo ni = manager.getActiveNetworkInfo();
2 String netname = ni.getTypeName();
3 if (netname.equals("MOBILE")) {
4     Log.d(TAG, "Network - > " + netname);
5 }else{
6     Log.d(TAG, "Network - > " + netname);
7 }

(2) 실시간 네트웍 상태 변화에 따른 값받기

 

android.content.BroadcastReceiver 클래스를 상속받아 하나 만든다.

01 import android.content.BroadcastReceiver;
02 import android.content.Context;
03 import android.content.Intent;
04 import android.net.ConnectivityManager;
05 import android.net.NetworkInfo;
06 import android.widget.Toast;
07  
08 public class ConnReceiver extends BroadcastReceiver {
09  
10     @Override
11     public void onReceive(Context context, Intent intent) {
12         String action = intent.getAction();
13          
14         // 네트웍에 변경이 일어났을때 발생하는 부분
15         if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
16             ConnectivityManager connectivityManager =
17                 (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
18             NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
19             NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
20             Toast.makeText(context,"Active Network Type : " + activeNetInfo.getTypeName() , Toast.LENGTH_SHORT).show();
21             Toast.makeText(context,"Mobile Network Type : " + mobNetInfo.getTypeName() , Toast.LENGTH_SHORT).show();
22         }
23     }
24 }

다음은 AndroidManifest.xml 에 recevier 와 필터를 등록한다필터는

android.net.conn.CONNECTIVITY_CHANGE  등록하면 된다그리고 receiver에는

상속받아 만든 클래스를 넣는다.

Posted by dlucky