스마트폰앱

오늘:
516
어제:
2,183
전체:
2,858,199

고객센타 : 070-7752-2000
팩스 : 070-7752-2001
휴대폰 : 010-9513-0019
email : voipkorea@yahoo.co.kr

국민은행
(주)제이에스솔루션
047101-04-155519

Flag Counter
■ 무료 : 유선 집전화 휴대폰 ( 한국 미국 중국 카나다) ↔ (국내 해외 여행자 상사 주재원 유학생) / 가입무 무제한무료■

http://hoyanet.pe.kr/2010



스마트폰 App을 보면 프로그램이 구동할 때, 혹은 네트워크를 사용할 때 현재 네트워크 연결이 WIFI인지 아닌지를 판별하여 사용자에게 알림을 보여주는 기능들을 자주 볼 수 있습니다.


알림상자를 보여주기 위해서는 우선적으로 네트워크 상태를 감지하는 것이 가능해야 합니다. 이번 포스팅에서는 현재 네트워크 상태를 감지하기 위한 클래스를 작성해 보도록 하겠습니다.



퍼미션의 추가

우선 다음의 퍼미션이 추가되어야 합니다.

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



유틸리티 클래스 생성

안드로이드 프로젝트에 CNetStatus라는 클래스를 추가합니다. 이 클래스에는 다음의 상수와 변수 및 메서드들이 포함되어져 있습니다.


상수

public static final int NET_TYPE_NONE = 0x00;

네트워크에 연결되어 있지 않다는 의미를 담은 상수 입니다. 이 값은 다른 메서드의 리턴값으로 사용됩니다.

public static final int NET_TYPE_WIFI = 0x01;

WIFI 네트워크에 연결되어 있다는 의미를 담은 상수 입니다. 이 값은 다른 메서드의 리턴값으로 사용됩니다.

public static final int NET_TYPE_3G = 0x02;

이동통신망 네트워크에 연결되어 있다는 의미를 담은 상수 입니다. 이 값은 다른 메서드의 리턴값으로 사용됩니다. 이전에는 3G 네트워크만 고려했기 때문에 변수 이름이 이렇습니다만, LTE일 경우에도 이 값을 사용합니다.

private static CNetStatus current = null;

메모리 관리를 위하여 클래스 스스로 static 형태로 객체를 갖습니다. 이 객체를 리턴해 주는 static 메서드를 별도로 만들어서 해당 메서드를 통해서 객체를 리턴 받게 합니다. static이기 때문에 객체가 중복 생성될 염려를 방지하기 위함입니다.


메서드

이 클래스에는 다음과 같은 메서드들이 구성되어 있습니다.

public static CNetStatus getInstance()

CNetStatus 객체를 리턴합니다. static 메서드는 객체에 종속되지 않고 static 변수에만 접근 가능하다는 점에 착안하여 클래스 내부에 클래스 자신의 객체를 리턴하기 위한 메서드를 작성해 두면 new 연산자 없이도 객체를 생성할 수 있습니다. 주로 공용으로 사용되는 유틸리티용 클래스에서 주로 사용하는 방법입니다. 예를 든다면 java.util 패키지의 Calendar 클래스 등이 있습니다.

private boolean getWifiState(Context p_oContext)

현재 Wifi가 연결되어 있는지 상태를 체크하여 boolean으로 리턴합니다. 이 메서드는 private 접근 한정자를 갖고 있기 때문에 객체를 통하여 호출할 수 는 없습니다.

파라미터로는 Context객체를 요구합니다. Context 객체는 Activity의 상위 클래스로서 Activity 자신을 전달하거나 Acitivity클래스에서 getApplicationContext() 메서드의 리턴값을 전달할 수 있습니다.

private boolean get3GState(Context p_oContext)

현재 이동통신 네트워크에 연결되어 있는지 상태를 체크하여 boolean으로 리턴합니다. SIM카드가 없거나 사용중지 상태인 경우 false를 리턴합니다. 이 메서드 역시 Context 객체를 파라미터로 전달합니다.

public int getNetType(Context p_oContext)

네트워크 상태를 점검하여 연결 상태를 의미하는 상수를 리턴합니다. 내부적으로 getWifiState() 메서드와 get3GState() 메서드를 호출합니다. Context 객체를 파라미터로 요구하며, WIFI의 연결 상태가 3G의 연결상태 보다 우선하도록 구성되어 있습니다.


클래스 구성

각 클래스를 구성하고 있는 기본 소스 틀은 다음과 같습니다.

  1. package [프로젝트 패키지 이름];   
  2.   
  3. import android.content.Context;   
  4. import android.net.ConnectivityManager;   
  5. import android.net.NetworkInfo;   
  6.   
  7. public class CNetStatus {   
  8.     public static final int NET_TYPE_NONE = 0x00;   
  9.     public static final int NET_TYPE_WIFI = 0x01;   
  10.     public static final int NET_TYPE_3G = 0x02;   
  11.     private static CNetStatus current = null;   
  12.   
  13.     public static CNetStatus getInstance() {}   
  14.   
  15.     private boolean getWifiState(Context p_oContext) {}   
  16.   
  17.     private boolean get3GState(Context p_oContext) {}   
  18.   
  19.     public int getNetType(Context p_oContext) {}   
  20. }  



메서드 구현

getInstance() 메서드

이 메서드는 객체의 중복 생성을 방지하기 위한 목적으로 사용되어 집니다.

  1. public static CNetStatus getInstance() {   
  2.     if (current == null) {   
  3.         current = new CNetStatus();   
  4.     }   
  5.     return current;   
  6. }  



getWifiState() 메서드

이 메서드는 내부적으로 ConnectivityManager 라는 객체를 생성하여 사용합니다. ConnectivityManager 객체는 Context 객체의 getSystemService 라는 메서드를 통해서 얻을 수 있는데, 그렇기 때문에 이 메서드에서 Context 객체를 파라미터로 요구합니다.

그렇게 얻어진 ConnectivityManager 객체로 부터 cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) 메서드를 호출하면 WIFI 연결 상태를 점검할 수 있는 NetworkInfo 객체를 얻을 수 있습니다. NetworkInfo 객체는 isConnected() 메서드를 통해서 연결상태를 boolean으로 조회할 수 있는 기능을 갖고 있습니다.

  1. private boolean getWifiState(Context p_oContext) {   
  2.     ConnectivityManager cm = (ConnectivityManager) p_oContext   
  3.             .getSystemService(Context.CONNECTIVITY_SERVICE);   
  4.     NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);   
  5.     boolean isConn = ni.isConnected();   
  6.     return isConn;   
  7. }  



get3GState() 메서드

이 메서드 역시 앞에서 구현한 getWifiState() 메서드와 동일한 과정으로 구현합니다. 다만, cm.getNetworkInfo() 메서드에 전달하는 파라미터가 ConnectivityManager.TYPE_MOBILE 로 변경됩니다.

  1. private boolean get3GState(Context p_oContext) {   
  2.     ConnectivityManager cm = (ConnectivityManager) p_oContext   
  3.             .getSystemService(Context.CONNECTIVITY_SERVICE);   
  4.     NetworkInfo ni = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);   
  5.     boolean isConn = ni.isConnected();   
  6.     return isConn;   
  7. }  



getNetType() 메서드

이 메서드는 내부적으로 앞의 두 메서드를 사용하여 얻어진 결과값을 통해서 상태를 판단하기 위한 상수값을 리턴합니다.

  1. public int getNetType(Context p_oContext) {   
  2.     int nNetType = CNetStatus.NET_TYPE_NONE;   
  3.   
  4.     if (getWifiState(p_oContext)) {   
  5.         nNetType = CNetStatus.NET_TYPE_WIFI;   
  6.     } else if (get3GState(p_oContext)) {   
  7.         nNetType = CNetStatus.NET_TYPE_3G;   
  8.     }   
  9.   
  10.     return nNetType;   
  11. }  



활용하기

다음의 샘플 코드는 위에서 작성한 클래스를 통하여 네트워크 상태를 점검하는 코드의 패턴을 나타냅니다. Activity 클래스 안에서 아래 코드를 작성한다는 가정하에 작성되었습니다.

  1. CNetStatus net_status = CNetStatus.getInstance();   
  2.            
  3. switch (net_status.getNetType(getApplicationContext())) {   
  4. case CNetStatus.NET_TYPE_WIFI:   
  5.     // WIFI 연결상태   
  6.     break;   
  7. case CNetStatus.NET_TYPE_3G:   
  8.     // 3G 혹은 LTE연결 상태   
  9.     break;   
  10. case CNetStatus.NET_TYPE_NONE:   
  11.     // 연결된 네트워크 없음   
  12.     break;   
  13. }  


조회 수 :
8788
등록일 :
2013.12.19
23:05:07 (*.223.1.98)
엮인글 :
http://webs.co.kr/index.php?document_srl=38156&act=trackback&key=14a
게시글 주소 :
http://webs.co.kr/index.php?document_srl=38156
List of Articles
번호 제목 글쓴이 날짜 조회 수
65 Package org.linphone.core Description admin 2017-10-22 241
64 Sqlite detail easy tutorial. admin 2017-09-09 549
63 Change package name Linphone Android admin 2017-08-25 656
62 Liblinphone - import Linphone library in Android Studio 2017 admin 2017-08-25 647
61 I am able to build the limphone on mac by follow the steps describe here admin 2017-08-25 636
60 To build liblinphone for Android, you must COMPILATION INSTRUCTIONS admin 2017-08-25 630
59 sipdroid source code admin 2017-08-08 740
58 안드로이드 주소록 전체가져오기 이름만가져오기 사진가져오기 코드 admin 2015-04-13 6525
57 the sipdroid Research Miscellaneous admin 2015-03-26 3151
56 HSS070 English Korean 무료 국제전화 미국 중국 카나다 무료 통화 제공 admin 2014-12-28 4582
55 Softphones admin 2014-09-20 4847
54 /xxxxx/gen already exists but is not a source folder. Convert to a source folder or rename it. admin 2014-09-03 5290
53 CSIPSimple building Rebuilding Detail on Eclips Good All is heare perfect admin 2014-08-15 5228
52 Improving QoE of SIP-based Automated Voice Interaction in Mobile Networks file admin 2014-03-20 6023
51 speex support in android admin 2014-03-19 6240
50 voxmobile Source and how to build admin 2014-02-18 6643
49 PJSIP hung the phone constantly corrected the problem admin 2014-02-09 7087
48 Csipsimple code rebuilding source sip 통신 Call Mechanism admin 2014-02-09 21721
47 Csipsimple code rebuilding source sip 통신 technical interviewer admin 2014-02-09 7001
46 Csipsimple code rebuilding source 주요인터페이스분석 admin 2014-02-09 40628
45 Csipsimple code rebuilding source 다운로드 구성 csipsimple 소스 프로젝트 admin 2014-02-09 8084
44 Android DialogFragment Tutorial admin 2014-02-09 7449
43 Creating a fullscreen DialogFragment with a custom background admin 2014-02-09 9920
» [Android API] 네트워크 상태 체크하기 admin 2013-12-19 8788
41 [안드로이드] 네트워크 연결 상태 체크 함수. admin 2013-12-19 7988
40 안드로이드 인터넷연결체크 ( 3g/lte/wifi ) 메서드 admin 2013-12-19 14486
39 Android Get Phone Contacts details with Contact Image admin 2013-12-15 7315
38 안드로이드 커스텀 타이틀바 How to add custom title bar to android application admin 2013-10-02 9755
37 How to create a custom title bar admin 2013-07-15 9994
36 Rotary Dialer clip art admin 2013-04-20 17610
35 Java 프로그램 실행화일 만들기 : Launch4j admin 2013-02-21 10717
34 java network programming source code, learning socket programming admin 2012-12-04 10702
33 2X Client Configuration | Android Remote Desktop 안드로이드 PC 리모트 데스크탑 admin 2012-12-02 12515
32 WIFI 3G 인터넷 연결 실시간 체크 소스코드 Broadcast Receiver 사용 (Adnroid) admin 2012-10-31 16994
31 통신사별 와이파이 비밀번호 admin 2012-10-31 14981
30 팁, wifi 패스워드 모음집 password admin 2012-10-21 11082
29 Android User Session Management using Shared Preferences admin 2012-10-16 32865
28 Unicode Tables v4 admin 2012-10-16 23346
27 HTML Codes admin 2012-10-16 10038
26 IBM Scan Codes EBCDIC Codes admin 2012-10-16 12242
25 ASCII Table and Description admin 2012-10-16 11513
24 How to Show Alert Dialog in Android (간단하고 쉬운설명) admin 2012-10-15 22671
23 How to read contacts on Android 2.0 admin 2012-10-14 13679
22 WIFI 3G 인터넷 연결 체크 소스코드 직접 사용한 코드 android admin 2012-10-14 15532
21 Android Detect Internet Connection Status admin 2012-10-12 21098
20 JAVA + SSL (server and client examples) admin 2012-10-07 22576
19 Querying The Android Contact Database admin 2012-09-30 10920
18 Manage Contacts android admin 2012-09-30 12889
17 Android Contacts API 2 example admin 2012-09-30 13996
16 Android 2.0 주소록 동기화 기능 admin 2012-09-30 39289
15 안드로이드용 앱 개발 마켓등록 까지 해본거 샘플 무료국제전화 앱 FreeDialer admin 2012-09-27 14984
14 아이폰 IPhone 앱 개발 기본 admin 2012-09-27 11610
13 [안드로이드/개발] Intent admin 2012-09-23 18126
12 안드로이드 타이머 절적한 설명과 간단한소스코드 등 안드로이드 프로그램 설명 깔끔 admin 2012-09-23 28920
11 google voice source code admin 2012-09-22 10941
10 [안드로이드] 서버/클라이언트 소켓(Socket) 통신하기 admin 2012-09-20 21197
9 FreeDial 무료국제전화는 프리미엄 국제전화 다이렉트 회선사용 admin 2012-09-20 11994
8 Android SQlite 사용 admin 2012-09-04 11865
7 안드로이드마켓에 앱 등록하는 순서 admin 2012-08-19 42779
6 전화관련 안드로이드함수 admin 2012-08-18 15608
5 자바 ,이클립스,Android SDK, ADT 설치하여 무료국제전화 다이얼러를 만들어봅시다. admin 2012-08-06 16118
4 아이폰용 무료국제전화용 무료 다이얼러 Speedydialer 설치및 사용방법 file admin 2012-07-14 11458
3 접속번호 + 상대방번호 # 를 주소록에 전화번호로 저장하여 사용하면 편리하다 admin 2012-06-17 13433
2 App Store - ILD Dialer admin 2012-06-17 10004
1 한국휴대폰에서 미국 중국 카나다 무료 국제전화 서비스 admin 2012-04-27 10358