像QQ啥 一断网就View.VISIBLE 出现类似这种提示
这样就行了,最后别忘了在这个activity的onDestroy生命周期方法解除广播:
如果你想在全部activity都监听的话就自定义application类,在里面注册这个广播就行了,也别忘了在这里解除广播。
这种是怎么做的呢?就是监听网络状态然后做出相应的处理,可以通过service或者广播接收者实现,这里讲解下如何用广播接收者BroadcastReceiver实现:
因为android系统网络状态变化会发出ConnectivityManager.CONNECTIVITY_ACTION的广播,所以监听这个就行了。
上代码:
先上个判断网络工具类:
public class NetUtil { /** * 没有连接网络 */ public static final int NETWORK_NONE = -1; /** * 移动网络 */ public static final int NETWORK_MOBILE = 0; /** * 无线网络 */ public static final int NETWORK_WIFI = 1; public static int getNetWorkState(Context context) { if (context == null) return NETWORK_NONE; // 得到连接管理器对象 ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager .getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) { return NETWORK_WIFI; } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) { return NETWORK_MOBILE; } } else { return NETWORK_NONE; } return NETWORK_NONE; } }广播接收者:
public class NetBroadcastReceiver extends BroadcastReceiver { public NetChangeListener netChangeListener ; @Override public void onReceive(Context context, Intent intent) { //网络变化系统会发出ConnectivityManager.CONNECTIVITY_ACTION if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)){ //说明网络发生变化 // Log.d("--------","网络变化啊啊 哎哎啊啊 "); int netWorkState = NetUtil.getNetWorkState(context); if (netChangeListener != null){ netChangeListener.onNetChange(netWorkState);//把网络状态传过去 } } } public NetBroadcastReceiver(NetChangeListener netChangeListener) { this.netChangeListener = netChangeListener; } public interface NetChangeListener {//回调 void onNetChange(int netWorkState); } }一般都是在主activity实现NetChangeListener 这个接口,根据回传来的网络状态值做相应的操作,比如像文章开头的如果断网了就把那个提示view显示出来等。。
最后别忘了Android四大组件要进行注册:
<!-- 广播 --> <receiver android:name=".receiver.NetBroadcastReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>但是!!但是!!请注意:
低版本的Android版本的话在清单文件manifest注册是没问题了,如果是高版本,谷歌改了,一些广播会收不到,这个就是其中之一,所以还要在代码中注册广播!!:
这样就行了,最后别忘了在这个activity的onDestroy生命周期方法解除广播:
unregisterReceiver(receiver);emmmm..
如果你想在全部activity都监听的话就自定义application类,在里面注册这个广播就行了,也别忘了在这里解除广播。