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
  • 20073

Android监控WIFI和GSM状态并绘制网络强度

在实际工作中,常常遇到APP显示网络强度的需求。 使用过程中涉及的应用权限如下: 一、网络强度分为二个部分:     1、手机网络GSM(2G/3G等)         GSM需要注册PhoneSt...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

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

Android 监控网络状态

public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Co...

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

android 网络实时监听网络状态变化 及 网络类型判断

android 中 我们经常需要判断 各种网络类型 然后需要给用户做出相应的提示,一般网络类型有 2g ,3g,4g ,wifi,无网络等等。 1. 网络类型判断 TelephonyManag...

Android 广播监听网络状态

我们在做多线程下载的时候,或者是在加载h5界面的时候,常常会遇到网络状态不好或者断网的时候,在这或者当我们的应用程序启动没有退出的时候,我们就需要对网络状态监听加以判断。 这时候,我们一般情况下,两种...

Android 通过注册广播,实时监听网络连接与断开状态的变化

很多时候我们都需要实时监听网络状态,当网络状态发生变化之后立即通知程序进行不同的操作。 监听广播的两种方式: (1)在AndroidManifest.xml配置文件中声明 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android程序中实时监控网络状态
举报原因:
原因补充:

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