Android网络状态监听
最近发现自己的项目中没有主动监测网络状态的功能,都是被动掉线!所以在网上找了些资料实现了下!这里写下来,方便以后自己翻看,也方便大家学习指导!
本DOME中设计到了3方面的知识(这些具体知识介绍博客园有很多,这里不多介绍)
1.service(服务)
2.Receiver(广播)
3.Timer(计时器线程)
接下来直接上代码了!
1.创建一个接口保存网络状态
public interface GetConnectState {public void GetState(boolean isConnected);}
2.建一个类继承service,实现广播定义和注册,计时器的开启
@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();//注册广播this.mReceiver = new ConnectReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(mReceiver, intentFilter);}/*** 广播,将服务接收到的数据传到界面* @author WJD**/public class ConnectReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubif (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {Timer timer = new Timer();timer.schedule(new QunXTask(), new Date());}}}/*** 定时器线程* * @author WJD* */class QunXTask extends TimerTask {@Overridepublic void run() {// TODO Auto-generated method stubif (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() {@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubmNetWrorkServer = ((NetWrorkServer.MyBinder) service).getServer();mNetWrorkServer.setOnGetConnectState(new GetConnectState() {@Overridepublic void GetState(boolean isConnected) {// TODO Auto-generated method stubif (isConnected) {mHandler.sendEmptyMessage(1);} else {mHandler.sendEmptyMessage(0);}}});}};然后就是显示,当然是用到Handler来更新UI
class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch (msg.what) {case 0:text_mob.setText("网络连接失败");break;case 1:text_mob.setText("网络连接成功");break;default:break;}}}5.最后不要忘了把监听器关闭
@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (mNetWrorkServer != null) {unbindService(serviceConnection);}}
希望有大牛指导,提供更强劲的思路!!!
转载自:http://www.cnblogs.com/wjdawx/p/3624865.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
