출처: http://mainia.tistory.com/549
안드로이드(Android) 단말기에서 ConnectivityManager 를 통해 실시간 네트웍 상태 파악하기
|
개발환경 : JDK 1.5,
Android GoogleAPI 2.1 , eclipse-galileo, window
XP
|
이 예제는 단말기에서 WIFI, 3G 가
되는지에 대한 체크를 위한 것이다.
두가지 정보를 체크할것이다. 하나는
네트웍을 사용할 시점에 WIFI, 3G 가
사용가능한지에 대한 체크이며 다른 하나는 네트웍상태가 바뀌었을 때
상태변화에 따른 작업을 하기 위한 소스 작업이다.
먼저 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);
|
06 |
if (mobile.isConnected() || wifi.isConnected()){
|
08 |
Log.d(TAG, "Network connect
success" );
|
10 |
Log.d(TAG, "Network connect
fail" ); |
현재 위의 소스를 돌여서 나온
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);
|
6 |
Log.d(TAG, "Network - >
" + netname);
|
(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; |
08 |
public class ConnReceiver
extends BroadcastReceiver { |
11 |
public void onReceive(Context context, Intent intent) {
|
12 |
String action = intent.getAction();
|
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();
|
다음은 AndroidManifest.xml 에 recevier 와 필터를 등록한다. 필터는
android.net.conn.CONNECTIVITY_CHANGE 등록하면 된다. 그리고
receiver에는
상속받아 만든 클래스를 넣는다.
댓글./////////////////////////////////////////////////////////////////////////////////////