Android程序中实时监控网络状态

原创 2015年11月18日 09:43:21

在Android程序开发中我们经常要实时监控网络的状态,从而实时的对网络的状态进行提醒信息,如果我们只是写在Application中则它只会监控我们第一次登陆App时的网络状态,而不会实时的监控网络状态,这样我们在程序中无法获得实时网络状态,因此我们需要使用广播(BroadCastReceiver)来进行网络的实时监控:

第一种方法:

class NetworkStateReceiver extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			//获得网络连接服务
			String mAction = intent.getAction();
			if (mAction.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
				ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
				info = connManager.getActiveNetworkInfo();
				if (info != null && info.isAvailable()) {
					String name = info.getTypeName();					<pre name="code" class="java">                                       Toast.makeText(ChangePasswordActivity.this, "您的网络处于连接状态, Toast.LENGTH_LONG).show();
}else{Toast.makeText(ChangePasswordActivity.this, "您的网络连接已中断", Toast.LENGTH_LONG).show();}}}}

然后在相应的Activity的onCreate中进行注册:

		//注册网络监听
		 filter = new IntentFilter();
		filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
		registerReceiver(mNetNetworkStateReceiver, filter);
在onDestroy中取消广播注册:

unregisterReceiver(mNetNetworkStateReceiver);
最后在你想判断广播的地方可以进行广播注册,用
if(info !=null&&info.isAvailable){
.....}
进行判断网络是否连接,并实现你自己想要的代码;

第二种方法:

写一个服务在需要的地方调用服务进行网络判断:

import android.app.Service;  
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.content.IntentFilter;  
import android.net.ConnectivityManager;  
import android.net.NetworkInfo;  
import android.os.IBinder;  
import android.util.Log;  
  
public class NetworkStateService extends Service{  
  
    private static final String tag="tag";  
    private ConnectivityManager connectivityManager;  
    private NetworkInfo info;  
  
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {  
  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            String action = intent.getAction();  
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {  
                Log.d(tag, "网络状态已经改变");  
                connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  
                info = connectivityManager.getActiveNetworkInfo();    
                if(info != null && info.isAvailable()) {  
                    String name = info.getTypeName();  
                    Log.d(tag, "当前网络名称:" + name);  
                    //doSomething()  
                } else {  
                    Log.d(tag, "没有可用网络");  
                  //doSomething()  
                }  
            }  
        }  
    };  
      
    @Override  
    public IBinder onBind(Intent intent) {  
        // TODO Auto-generated method stub  
        return null;  
    }  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        IntentFilter mFilter = new IntentFilter();  
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);  
        registerReceiver(mReceiver, mFilter);  
    }  
  
    @Override  
    public void onDestroy() {  
        super.onDestroy();  
        unregisterReceiver(mReceiver);  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        return super.onStartCommand(intent, flags, startId);  
    }  
      
}  
在Manifast中注册这个Service:
<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" /> 
在Manifast中配置权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
在Activity中需要的地方启动网络状态Service;
Intent intent=new Intent(context,NetworkStateService.class);  
startService(intent); 

如果想让广播一直接收通知,也可将广播注册为静态广播


网络连接的其他几个方法:

获取当前网络类型

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;    
 }

判断有无网络

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;    
 }  

判断有无WIFI

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;    
 }  

判断有无移动网络

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;    
 } 


判断网络状态:

@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();
} 

}
在Activity中进行注册及注销
IntentFilter filter = new IntentFilter(); 
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetworkStateReceiver, filter);

unregisterReceiver(mNetworkStateReceiver); //取消监听











Android 实时监测(监听)网络连接状态变化

看了网上的很多,都不是自己想要的。所以自己就参考着写了一个。 实现这个的方法很多,我是想的这种,如果哪有不足,有bug的地方希望大家指出,共同进步。。。。 先简单说一下思路:网络变化时系统会发出广播...
  • mxiaoyem
  • mxiaoyem
  • 2016年03月11日 16:12
  • 24869

Android网络监控(监控Http速度、扫描Rssi、ping实现、Ftp实现)

  • 2014年08月07日 16:14
  • 2.85MB
  • 下载

Android 监控网络状态

public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Co...
  • wangkuifeng0118
  • wangkuifeng0118
  • 2012年03月08日 16:16
  • 15589

android网络监控下的观察者模式运用

观察者模式,由观察者和被观察对象组成,java已经提供了相关类供我们开发者调用! Observable - 被观察者 Observer- 观察者 在app开发中,很多情况下都会监听...
  • yoywow
  • yoywow
  • 2016年07月24日 11:59
  • 1434

Android 实时监听网络状态

Android实时监听网络状态(2) 在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒。一般可以通过ConnectivityManager来...
  • solarsaber
  • solarsaber
  • 2015年08月05日 10:54
  • 7300

Android:检测网络状态&监听网络变化

前言 Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测 今天,我将教大家如何进行网络状态的检测和监听网络状态的变化 目录1. 检测网络状态1.1 实现思路 获得Con...
  • carson_ho
  • carson_ho
  • 2016年11月02日 21:10
  • 10424

Android 监听网络连接状态

当然离不开广播public class NetBroadcastReceiver extends BroadcastReceiver { public NetBroadcastReceiver(...
  • jiaoyaning1210
  • jiaoyaning1210
  • 2016年09月13日 14:25
  • 1205

Android 操作以太网,监听网线插拔和以太网开关,设置以太网静态IP等。

在做机顶盒项目的时候,有个需求是这样的: 1、当网线插上机顶盒的时候,apk要及时响应,比如显示网线已经插上。拔掉网线也要响应。 2、当插上网线的时候,可以查看以太网当前的IP信息以及是否是静态I...
  • u010216716
  • u010216716
  • 2015年01月20日 21:37
  • 5069

安卓通过广播实时监听当前网络状况

需求: 当网络断开或者连接上的时候,需要你的APP作出一定的响应,有时候还需要判断当前网络的类型,wifi或者移动数据… 分析:网络发生变化系统会发送广播 通过注册一个广播接收器来接收广播 判断当...
  • z1353095373
  • z1353095373
  • 2016年12月13日 09:17
  • 2948

Android网络状态实时监听器

实现网络状态实时监听,使用BroadcastReceiver。本身Android系统已经实现了网络状态发生变化时发送广播的功能。我们则需是实现广播接收。 /** * 网络连接变化监听器 * *...
  • u013205623
  • u013205623
  • 2016年04月22日 16:19
  • 951
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android程序中实时监控网络状态
举报原因:
原因补充:

(最多只允许输入30个字)