Android 에서 네트워크 연결 사용 가능 여부 및 네트워크 상태 모니터링

네트워크 정 보 를 가 져 오 려 면 AndroidManifest.xml 파일 에 해당 하 는 권한 을 추가 해 야 합 니 다.1)네트워크 연결 여 부 를 판단

public boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
2)와 이 파이 네트워크 사용 가능 여 부 를 판단

public boolean isWifiConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWiFiNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWiFiNetworkInfo != null) {
return mWiFiNetworkInfo.isAvailable();
}
}
return false;
}
3)모 바 일 네트워크 사용 가능 여 부 를 판단

public boolean isMobileConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mMobileNetworkInfo = mConnectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mMobileNetworkInfo != null) {
return mMobileNetworkInfo.isAvailable();
}
}
return false;
}
4)현재 네트워크 연결 의 유형 정보 획득

public static int getConnectedType(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
return mNetworkInfo.getType();
}
}
return -1;
}
일반적으로 Connectivity Manager 를 통 해 이 일 을 완성 할 수 있다.Connectivity Manager 는 네 가지 주요 임무 가 있 습 니 다.1.휴대 전화 네트워크 상태(GPRS,WIFI,UMTS 등 포함)2.휴대 전화 상태 가 바 뀌 었 을 때 방송 3 을 보 내 고 네트워크 연결 이 실 패 했 을 때 고장 전환 4.응용 프로그램 에 사용 가능 한 네트워크 를 얻 을 수 있 는 높 은 정밀도 와 거 친 상 태 를 제공 합 니 다.우리 가 프로그램 에서 네트워크 상 태 를 감청 하려 고 할 때몇 가지 절차 만 거치 면 됩 니 다.1.Receiver 가 다시 불 러 오 는 onReceive 함 수 를 정의 합 니 다.그 중에서 필요 한 기능 을 완성 할 수 있 습 니 다.예 를 들 어 와 이 파이 와 GPRS 가 끊 어 졌 는 지 에 따라 공간의 외관 을 바 꿀 수 있 습 니 다

connectionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Log.i(TAG, "unconnect");
// unconnect network
}else {
// connect network
}
}
};
2.적당 한 곳 에 Receiver 를 등록 하면 프로그램 에 등록 할 수 있 습 니 다.onCreate 에서 다음 과 같은 함 수 를 호출 하면 됩 니 다.

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectionReceiver, intentFilter);
3.적당 할 때 Receiver 등록 을 취소 합 니 다.프로그램 에서 취소 할 수 있 습 니 다.onDestroye 에서 다음 과 같은 함 수 를 호출 하면 됩 니 다.

if (connectionReceiver != null) {
unregisterReceiver(connectionReceiver);
}
P:인터넷 에는 Telephony Manager 를 사용 하 는 방법 에 관 한 방법 이 많 습 니 다.방법 은 다음 과 같 습 니 다.(그러나 저 는 여러 번 시도 해 보 았 습 니 다.예 를 들 어 Activity 에 처음 들 어 갈 때마다 네트워크 가 끊 긴 신 호 를 자동 으로 받 습 니 다.네트워크 상태 가 바 뀔 때마다 여러 번 리 셋 을 받 고 상태 가 정확 하지 않 습 니 다.뭐 공부 해요?4567913)두 번 째 방법 에 대해 서 는 본인 이 시도 해 본 적 이 없다.첫 번 째 방법 은 프로그램 이 배경 에 숨 어 있 으 려 면 서 비 스 를 열 어 BroadcastReceiver 를 service 에 등록 하 는 것 을 권장 하지만 등록 취 소 를 잊 지 마 세 요.테스트 에서 이러한 상황 을 만 났 습 니 다.현재 와 이 파 이 를 연결 하 는 경로 장 치 를 닫 았 지만 프로그램 은 unconnect network 를 포착 하지 못 했 습 니 다.아마도 핸드폰 장치 가 바로 다른 경로 장 치 를 연결 하기 때 문 일 것 입 니 다.Android 모니터링 네트워크 상태

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyMgr.listen(new PhoneStateListener(){
@Override
public void onDataConnectionStateChanged(int state) {
switch(state){
case TelephonyManager.DATA_DISCONNECTED://
break;
case TelephonyManager.DATA_CONNECTING://
break;
case TelephonyManager.DATA_CONNECTED://
break;
}
}
}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
에서 이 방법 은 네트워크 연결 여 부 를 판단 하 는 코드 입 니 다.true 로 돌아 가면 네트워크 가 있 음 을 표시 하고 false 로 돌아 가면 네트워크 가 없 음 을 표시 합 니 다.안 드 로 이 드 네트워크 애플 리 케 이 션 개발 에 서 는 네트워크 연결 사용 여 부 를 판단 해 야 하 는 경우 가 많아 네트워크 상태의 변 화 를 감청 할 필요 가 종종 있다.안 드 로 이 드 의 네트워크 상태 감청 은 브 로드 캐 스 트 Receiver 로 네트워크 상태 가 바 뀐 방송 을 받 을 수 있 습 니 다.구체 적 으로 다음 과 같 습 니 다.

public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
Log.i("NetWorkState", "Unavailabel");
return false;
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
Log.i("NetWorkState", "Availabel");
return true;
}
}
}
}
return false;
}

@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, " ");
boolean success = false;
//
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
// State state = connManager.getActiveNetworkInfo().getState();
State state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_WIFI).getState(); //
if (State.CONNECTED == state) { // WIFI
success = true;
}
state = connManager.getNetworkInfo(
ConnectivityManager.TYPE_MOBILE).getState(); //
if (State.CONNECTED != state) { // GPRS
success = true;
}
if (!success) {
Toast.makeText(LocationMapActivity.this, " ", Toast.LENGTH_LONG).show();
}
}
많은 친구 들 이 안 드 로 이 드 개발 에서 핸드폰 네트워크 유형 에 대한 판단 을 받 을 수 있 습 니 다.현재 안 드 로 이 드 플랫폼 핸드폰 에 대해 4 중 상태 가 존재 할 수 있 기 때 문 입 니 다.1.인터넷 이 없 는 상태(이런 상 태 는 핸드폰 이 정지 되 었 기 때 문 일 수 있 습 니 다.인터넷 이 켜 지지 않 고 신호 가 좋 지 않 은 이유 등)2.와 이 파이 로 인터넷 3.CMWAP(중국 모 바 일 에이전트)4.CMNET 으로 인터넷 에 접속 하 는 네 가지 상 태 는 인터넷 이 없 으 면 인터넷 을 요청 할 수 없 을 것 이다.wap 라면 핸드폰 에 중국 모 바 일 에이 전 트 를 추가 하고 핸드폰 에 중국 모 바 일 에이 전 트 를 추가 해 야 한다.다음은 네트워크 판단 방법 입 니 다.

//
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);
// Activity onDestroy :'
unregisterReceiver(mNetworkStateReceiver); //
서비스 대상 을 얻 었 기 때문에 이 네트워크 상 태 는 항상 갱신 되 기 때문에 우 리 는 네트워크 상태 만 얻 으 면 됩 니 다!공 부 는 축적 에 있 으 니 여러분 과 함께 나 누고 싶 습 니 다.

좋은 웹페이지 즐겨찾기