Android网络状态监听

最近发现自己的项目中没有主动监测网络状态的功能,都是被动掉线!所以在网上找了些资料实现了下!这里写下来,方便以后自己翻看,也方便大家学习指导!
本DOME中设计到了3方面的知识(这些具体知识介绍博客园有很多,这里不多介绍)
1.service(服务)
2.Receiver(广播)
3.Timer(计时器线程)
接下来直接上代码了!
1.创建一个接口保存网络状态


public interface GetConnectState {
     
     public void GetState(boolean isConnected);
 
}

2.建一个类继承service,实现广播定义和注册,计时器的开启

@Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        //注册广播
        this.mReceiver = new ConnectReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, intentFilter);
    }


    /**
     * 广播,将服务接收到的数据传到界面
     * @author WJD
     *
     */
    public class ConnectReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if (intent.getAction().equals(
                    ConnectivityManager.CONNECTIVITY_ACTION)) {
                Timer timer = new Timer();
                timer.schedule(new QunXTask(), new Date());
            }
        }
    }


    /**
     * 定时器线程
     * 
     * @author WJD
     * 
     */
    class QunXTask extends TimerTask {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            if (isNetConnect()) {
                isConnected = true;
            } else {
                isConnected = false;
            }
            //设置连接状态
            if (onGetConnectState != null) {
                onGetConnectState.GetState(isConnected);
            }
        }
    }


3.下面是具体获取网络状态的方法,先获取到所有网络(wifi,移动。。。)逐一判断是否连接(如果要显示网络信息也很简单自己可以试试,获取的时候信息都包括了)

/**
     * 判断是否有网络
     * @return
     */
    private boolean isNetConnect() {
        //初始化网络管理器
        ConnectivityManager conMag = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        if (conMag == null) {
            return false;
        } else {
            //获取所有的网络连接,包括wifi,和移动网
            NetworkInfo[] infos = conMag.getAllNetworkInfo();
            if (infos != null) {
                for (int i = 0; i < infos.length; i++) {
                    //判断是否处于连接状态
                    if (infos[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

4.现在回到界面,首先要开启服务
Intent intent = new Intent();
intent.setClass(this, NetWrorkServer.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
其次要定义一个监听器
/**
     * 网络状态监听事件
     */
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub
            mNetWrorkServer = ((NetWrorkServer.MyBinder) service).getServer();
            mNetWrorkServer.setOnGetConnectState(new GetConnectState() {
                @Override
                public void GetState(boolean isConnected) {
                    // TODO Auto-generated method stub
                        if (isConnected) {
                            mHandler.sendEmptyMessage(1);
                        } else {
                            mHandler.sendEmptyMessage(0);
                        }
                    }
            });
        }
    };
然后就是显示,当然是用到Handler来更新UI
class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                text_mob.setText("网络连接失败");
                break;
            case 1:
                text_mob.setText("网络连接成功");
                break;


            default:
                break;
            }
        }
    }
5.最后不要忘了把监听器关闭
@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        if (mNetWrorkServer != null) {
            unbindService(serviceConnection);
        }
    }

希望有大牛指导,提供更强劲的思路!!!


转载自:http://www.cnblogs.com/wjdawx/p/3624865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值