您的位置:首页 > 理论基础 > 计算机网络

Broadcast Receiver监听网络状态

2016-06-01 18:28 344 查看
在代码中动态注册,不需要在AndroidManifest.xml里静态注册,静态注册在不打开App的情况下,有可以接收到广播。

public class MainActivity extends Activity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络的状态;网络状态改变就会被调动。
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
}


创建NetworkChangeReceiver类继承BroadcaseReceiver

class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//枚举 enum NetworkStatus {DisConnect,Mobile,Wifi}
ConfigConstant.NetworkStatus status
=getConnectType();
switch(status){
case DisConnect:

break;
case Mobile:

break;
case Wifi:

break;
}
}
/*
*获取网络状态,
*/
private ConfigConstant.NetworkStatus getConnectType() {
ConnectivityManager connMgr =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();

if (activeInfo != null && activeInfo.isConnected()){
if (activeInfo.getType() == ConnectivityManager.TYPE_WIFI)
return ConfigConstant.NetworkStatus.Wifi;
else if (activeInfo.getType() == ConnectivityManager.TYPE_MOBILE)
return ConfigConstant.NetworkStatus.Mobile;
}
return ConfigConstant.NetworkStatus.DisConnect;
}


网络状态一旦发生改变,会调用NetworkChangeReceiver 的onReceive(),再去获取网络状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  broadcast