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. 이전 댓글 더보기
  2. 저도부탁해요 2012.01.06 17:00  댓글주소  수정/삭제  댓글쓰기

    저도 전체 소스 좀 보내줄 수 있나요??
    네트워크쪽이 너무 어려워서 도통 감을 잡을 수가 없습니다.
    shineblue08@naver.com
    부탁할께요^^

  3. Gabriel. 2012.01.20 12:04  댓글주소  수정/삭제  댓글쓰기

    안녕하세요,, ^^
    위 소스를 저도 받을 수 있는지요?
    가능하시면.. 공유 부탁 드립니다

    shup77@naver.com

  4. 댄디 2012.02.07 11:49  댓글주소  수정/삭제  댓글쓰기

    안녕하세여~
    저도 전체소스 하나 받고싶습니다 ㅠ

    공유부탁드릴께요 ㅠ

    sk757777@naver.com 입니다ㅠ

  5. 나그네 2012.02.07 12:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요...
    저도 전체소스 받고 싶습니다
    부탁드려요
    brilliant.1981.0629@gmail.com

  6. Favicon of https://88oy.tistory.com 팔팔청춘 2012.03.15 17:26 신고  댓글주소  수정/삭제  댓글쓰기

    좋은정보 감사드립니다.

  7. 곰랑이 2012.05.13 13:28  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    글 잘보았습니다.
    저도 지금 이쪽 공부하고 있는데 영 삽질만 하네요...ㅠㅠ
    조목조목 짚어보게 전체 소스좀 볼 수 있을까요?ㅠ
    부탁드립니다.
    khsmingss@naver.com

  8. 부탁드립니다 2012.08.16 14:05  댓글주소  수정/삭제  댓글쓰기

    글 잘보았습니다.
    혹시 가능 하시다면 해당 전체 소스 공유 해 주실 수 있을까요?
    부탁드립니다.
    uhhehheh@naver.com

  9. 블랙 2013.02.04 17:09  댓글주소  수정/삭제  댓글쓰기

    정보 잘 봤습니다~
    네트워크 어렵네요
    위의 해당 풀 소스 공유 가능하신지요?
    karl_lee@naver.com 입니다~

  10. 유민호 2013.02.15 15:14  댓글주소  수정/삭제  댓글쓰기

    잘보고갑니다
    저도 풀소스 공유해주시면 감사하겠습니다.
    minho0827@nate.com 입니다.좋은하루되세요!

  11. 조윤호 2013.03.08 15:14  댓글주소  수정/삭제  댓글쓰기

    글 잘보았습니다.
    혹시 가능 하시다면 해당 전체 소스 공유 해 주실 수 있을까요?
    부탁드립니다.
    rjaakfn@nate.com

  12. 하조이 2013.04.01 13:00  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 저도 계속적으로 공부를 하고 있는 중인데 좋은 내용을 확인했네요^^
    가능하시다면 저도 소스를 공유 받고 싶은데요.
    부탁드립니다~
    jjangjong@nate.com

  13. 꼭부탁드립니다. 2013.05.28 10:10  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    포스팅글 정말 잘 보았습니다.
    혹시 가능하시다면 해당 전체 소스를 공유받을 수 있을까요?
    꼭 부탁드립니다!.ㅠㅠ
    atvta@naver.com

  14. 양재영 2013.05.28 18:09  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    지금 안드로이드 공부하고 있읍니다.
    yjy3000@nate.com
    저도 자료 좀 부탁합니다. 꼭 부탁합니다 .. UDP 다른게 설정해야 합니까.. 꼭 부탁합니다

  15. 화이트 2013.09.11 10:41  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은글 잘보았습니다.
    제가 지금 원격스피커 어플리케이션을 만들어보고있는데
    풀소스좀 부탁드려요 되나요?ㅠㅠ
    죄송합니다..ㅠㅠ
    jylove202@naver.com

  16. 허세영 2014.02.24 15:09  댓글주소  수정/삭제  댓글쓰기

    정말 좋은글 잘봣어요!! 저도 풀소스좀 주시겠어요?ㅠㅠㅠ

    hiues1@naver.com 꼭 좀 부탁드립니다

  17. 이예환 2014.03.26 07:00  댓글주소  수정/삭제  댓글쓰기

    정말로 제가 찾던 자료인데 소스좀 부탁드리면 안될까요?
    제발 부탁드립니다...
    9488372@hanmail.net
    제발 부탁드려요 꼭좀요.!!

  18. 블루피시 2014.08.03 12:35  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 좋은 소스입니다.

  19. ? 2014.08.12 13:14  댓글주소  수정/삭제  댓글쓰기

    그러게요 첨부터 끝까지 다보여주고있는데

  20. 소스가 필요하다는분은 2016.03.02 16:25  댓글주소  수정/삭제  댓글쓰기

    안드로이드 기초부터 다시 공부하셔야할듯 ㅎㅎ

  21. 좋은 내용이네요 2017.04.06 01:34  댓글주소  수정/삭제  댓글쓰기

    참고하겠습니다.
    좋은하루되세요~