Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

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

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

반응형
Posted by 녹두장군1
,