Android 网络状态实时监听代码实例(一)
其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听。
1、添加访问网络和获取网络状态的权限
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permissionandroid:name="android.permission.INTERNET"/>
2、新建一个Application类并继承android.app.Application申明变量保存网络状态
packagecom.javen.application; importcom.javen.netbroadcast.NetUtil; publicclassApplicationextendsandroid.app.Application{ privatestaticApplicationmApplication; publicstaticintmNetWorkState; publicstaticsynchronizedApplicationgetInstance(){ returnmApplication; } @Override publicvoidonCreate(){ super.onCreate(); mApplication=this; initData(); } publicvoidinitData(){ mNetWorkState=NetUtil.getNetworkState(this); } }
3、新建NetBroadcastReceiver类继承BroadcastReceiver并实现onReceive方法在onReceive方法通知接口完成加载
packagecom.javen.receiver; importjava.util.ArrayList; importcom.javen.application.Application; importcom.javen.netbroadcast.NetUtil; importandroid.content.BroadcastReceiver; importandroid.content.Context; importandroid.content.Intent; publicclassNetBroadcastReceiverextendsBroadcastReceiver{ publicstaticArrayList<netEventHandler>mListeners=newArrayList<netEventHandler>(); privatestaticStringNET_CHANGE_ACTION="android.net.conn.CONNECTIVITY_CHANGE"; @Override publicvoidonReceive(Contextcontext,Intentintent){ if(intent.getAction().equals(NET_CHANGE_ACTION)){ Application.mNetWorkState=NetUtil.getNetworkState(context); if(mListeners.size()>0)//通知接口完成加载 for(netEventHandlerhandler:mListeners){ handler.onNetChange(); } } } publicstaticabstractinterfacenetEventHandler{ publicabstractvoidonNetChange(); } }
4、在应该的Activity中实现netEventHandler接口
packagecom.javen.netbroadcast; importcom.javen.receiver.NetBroadcastReceiver; importcom.javen.receiver.NetBroadcastReceiver.netEventHandler; importcom.javen.ui.base.BaseActivity; importandroid.os.Bundle; importandroid.view.Menu; publicclassMainActivityextendsBaseActivityimplementsnetEventHandler{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NetBroadcastReceiver.mListeners.add(this); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.main,menu); returntrue; } @Override publicvoidonNetChange(){ //TODOAuto-generatedmethodstub if(NetUtil.getNetworkState(this)==NetUtil.NETWORN_NONE){ T.showLong(this,R.string.net_err); }else{ T.showLong(this,"网络可以使用"); } } }
5、判断网络的工具类
packagecom.javen.netbroadcast; importandroid.content.Context; importandroid.net.ConnectivityManager; importandroid.net.NetworkInfo.State; publicclassNetUtil{ publicstaticfinalintNETWORN_NONE=0; publicstaticfinalintNETWORN_WIFI=1; publicstaticfinalintNETWORN_MOBILE=2; publicstaticintgetNetworkState(Contextcontext){ ConnectivityManagerconnManager=(ConnectivityManager)context .getSystemService(Context.CONNECTIVITY_SERVICE); //Wifi Statestate=connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState(); if(state==State.CONNECTED||state==State.CONNECTING){ returnNETWORN_WIFI; } //3G state=connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .getState(); if(state==State.CONNECTED||state==State.CONNECTING){ returnNETWORN_MOBILE; } returnNETWORN_NONE; } }
以上所述是小编给大家介绍的Android网络状态实时监听代码实例(一),希望对大家有所帮助!