Android开发网络状态实时监控

在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();                                                         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){  
.....}  

进行判断网络是否连接,并实现你自己想要的代码;

第二种方法:

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

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

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

1.获取当前网络类型

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

2.判断有无网络

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

3.判断有无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;      
 }    

4.判断有无移动网络

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

5.判断网络状态:

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

}  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值