使用Service和BroadcastReceiver实时监听网络状态

很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:
Java代码   收藏代码
  1. import android.app.Service;  
  2. import android.content.BroadcastReceiver;  
  3. import android.content.Context;  
  4. import android.content.Intent;  
  5. import android.content.IntentFilter;  
  6. import android.net.ConnectivityManager;  
  7. import android.net.NetworkInfo;  
  8. import android.os.IBinder;  
  9. import android.util.Log;  
  10.   
  11. public class NetworkStateService extends Service{  
  12.   
  13.     private static final String tag="tag";  
  14.     private ConnectivityManager connectivityManager;  
  15.     private NetworkInfo info;  
  16.   
  17.     private BroadcastReceiver mReceiver = new BroadcastReceiver() {  
  18.   
  19.         @Override  
  20.         public void onReceive(Context context, Intent intent) {  
  21.             String action = intent.getAction();  
  22.             if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {  
  23.                 Log.d(tag, "网络状态已经改变");  
  24.                 connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  
  25.                 info = connectivityManager.getActiveNetworkInfo();    
  26.                 if(info != null && info.isAvailable()) {  
  27.                     String name = info.getTypeName();  
  28.                     Log.d(tag, "当前网络名称:" + name);  
  29.                     //doSomething()  
  30.                 } else {  
  31.                     Log.d(tag, "没有可用网络");  
  32.                   //doSomething()  
  33.                 }  
  34.             }  
  35.         }  
  36.     };  
  37.       
  38.     @Override  
  39.     public IBinder onBind(Intent intent) {  
  40.         // TODO Auto-generated method stub  
  41.         return null;  
  42.     }  
  43.   
  44.     @Override  
  45.     public void onCreate() {  
  46.         super.onCreate();  
  47.         IntentFilter mFilter = new IntentFilter();  
  48.         mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);  
  49.         registerReceiver(mReceiver, mFilter);  
  50.     }  
  51.   
  52.     @Override  
  53.     public void onDestroy() {  
  54.         super.onDestroy();  
  55.         unregisterReceiver(mReceiver);  
  56.     }  
  57.   
  58.     @Override  
  59.     public int onStartCommand(Intent intent, int flags, int startId) {  
  60.         return super.onStartCommand(intent, flags, startId);  
  61.     }  
  62.       
  63. }  


别忘了在Manifast中配置这个Service:
Xml代码   收藏代码
  1. <service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />  

还有权限:
Xml代码   收藏代码
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

在必要的地方启动该Service即可:
Java代码   收藏代码
  1. Intent i=new Intent(context,NetworkStateService.class);  
  2. startService(i);  


另外附加几个 Android网络连接的判断
1)判断是否有网络连接
Java代码   收藏代码
  1. public boolean isNetworkConnected(Context context) {    
  2.      if (context != null) {    
  3.          ConnectivityManager mConnectivityManager = (ConnectivityManager) context    
  4.                  .getSystemService(Context.CONNECTIVITY_SERVICE);    
  5.          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();    
  6.          if (mNetworkInfo != null) {    
  7.              return mNetworkInfo.isAvailable();    
  8.          }    
  9.      }    
  10.      return false;    
  11.  }  

2)判断WIFI网络是否可用
Java代码   收藏代码
  1. public boolean isWifiConnected(Context context) {    
  2.      if (context != null) {    
  3.          ConnectivityManager mConnectivityManager = (ConnectivityManager) context    
  4.                  .getSystemService(Context.CONNECTIVITY_SERVICE);    
  5.          NetworkInfo mWiFiNetworkInfo = mConnectivityManager    
  6.                  .getNetworkInfo(ConnectivityManager.TYPE_WIFI);    
  7.          if (mWiFiNetworkInfo != null) {    
  8.              return mWiFiNetworkInfo.isAvailable();    
  9.          }    
  10.      }    
  11.      return false;    
  12.  }  

3)判断MOBILE网络是否可用
Java代码   收藏代码
  1. public boolean isMobileConnected(Context context) {    
  2.      if (context != null) {    
  3.          ConnectivityManager mConnectivityManager = (ConnectivityManager) context    
  4.                  .getSystemService(Context.CONNECTIVITY_SERVICE);    
  5.          NetworkInfo mMobileNetworkInfo = mConnectivityManager    
  6.                  .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);    
  7.          if (mMobileNetworkInfo != null) {    
  8.              return mMobileNetworkInfo.isAvailable();    
  9.          }    
  10.      }    
  11.      return false;    
  12.  }  

4)获取当前网络连接的类型信息
Java代码   收藏代码
  1. public static int getConnectedType(Context context) {    
  2.      if (context != null) {    
  3.          ConnectivityManager mConnectivityManager = (ConnectivityManager) context    
  4.                  .getSystemService(Context.CONNECTIVITY_SERVICE);    
  5.          NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();    
  6.          if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {    
  7.              return mNetworkInfo.getType();    
  8.          }    
  9.      }    
  10.      return -1;    
  11.  } 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值