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网络状态实时监听代码实例(一),希望对大家有所帮助!