android 네트워크 연결 상태 확인 절차
8088 단어 android 네트워크 검사네트워크 연결
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, 어플리케이션에 사용 가능한 네트워크를 얻을 수 있는 높은 정밀도와 거친 상태 제공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);}Ps: 인터넷에는 Telephony Manager를 사용하는 방법에 대한 여러 가지 방법이 있습니다. 방법은 다음과 같습니다. (하지만 여러 번 시도했지만 문제가 있습니다. 예를 들어 액티비티에 처음 들어갈 때마다 자동으로 네트워크가 끊어지는 신호를 받습니다. 네트워크 상태가 바뀔 때마다 여러 번 리셋을 받았고 상태가 정확하지 않습니다. 주의해야 할 점이 무엇인지 모르겠습니다. 지적해 주세요!)
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);
두 번째 방법은 본인이 시도해 본 적이 없습니다.첫 번째 방식은 프로그램이 백그라운드에 숨겨져 있으면 서비스를 켜서 Broadcast Receiver를 서비스에 등록하는 것을 권장하지만 등록을 취소하는 것을 잊지 마세요.테스트에서 이러한 상황을 만났습니다. 현재 와이파이에 연결된 루트 장치를 닫았지만 프로그램이 unconnectnetwork를 포착하지 못했습니다. 아마도 핸드폰 장치가 바로 다른 루트 장치를 연결해서 안드로이드가 네트워크 상태를 감시했기 때문일 것입니다
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;
}
위의 이 방법은 네트워크가 연결되었는지 판단하는 코드입니다. true로 돌아가면 네트워크가 있음을 표시하고false로 돌아가면 네트워크가 없음을 나타냅니다.안드로이드 네트워크 응용 프로그램 개발에서 네트워크 연결의 사용 여부를 판단해야 하기 때문에 네트워크 상태의 변화를 감청할 필요가 자주 있다.android의 네트워크 상태 감청은 BroadcastReceiver로 네트워크 상태가 바뀐 방송을 수신할 수 있으며 구체적으로 다음과 같다
@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();
}
}
//
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);
// Activity onDestroy :'
unregisterReceiver(mNetworkStateReceiver); //
많은 친구들이android 개발에서 핸드폰 네트워크 유형 판단을 만나게 된다. 왜냐하면 현재의 안드로이드 플랫폼 핸드폰에 대해 말하자면 4중 상태가 존재할 수 있기 때문이다.무네트워크(이 상태는 핸드폰이 정지되고 네트워크가 켜지지 않아 신호가 좋지 않기 때문일 수 있다)2.와이파이로 인터넷 접속하기3.CMWAP(중국 모바일 에이전트) 4.CMNET 인터넷이라는 네 가지 상태는 인터넷이 없으면 인터넷을 요청할 수 없습니다. 만약wap라면 핸드폰에 중국 모바일 에이전트를 추가해야 합니다. 핸드폰에 중국 모바일 에이전트를 추가해야 합니다!다음은 인터넷 판단 방법입니다
/**
* @author sky
* Email [email protected]
* QQ:840950105
* -1: 1:WIFI 2:wap 3:net
* @param context
* @return
*/
public static int getAPNType(Context context){
int netType = -1;
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if(networkInfo==null){
return netType;
}
int nType = networkInfo.getType();
if(nType==ConnectivityManager.TYPE_MOBILE){
Log.e("networkInfo.getExtraInfo()", "networkInfo.getExtraInfo() is "+networkInfo.getExtraInfo());
if(networkInfo.getExtraInfo().toLowerCase().equals("cmnet")){
netType = CMNET;
}
else{
netType = CMWAP;
}
}
else if(nType==ConnectivityManager.TYPE_WIFI){
netType = WIFI;
}
return netType;
}
획득한 것은 서비스 대상이기 때문에 이 네트워크 상태는 시시각각 갱신된 것이기 때문에 우리는 네트워크 상태만 얻으면 된다!공부는 축적에 있습니다. 여러분과 함께 나누시길 바랍니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ip_ 정보conntrack 추적 연결이 꽉 차서 네트워크 패키지 분실 문제에 대한 분석dmesg 명령을 통해 로그를 보면 다음과 같은 정보를 발견할 수 있습니다. 이 안의 관건적인 정보는'ip_conntrack:tablefull,droppingpacket'입니다. 여기서 iptables와 관련이 있다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.