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

很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。 
这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。 
原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下: 
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);  
    }  
      
}  


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值