android 用广播接受者监听手机网络状态

像QQ啥 一断网就View.VISIBLE 出现类似这种提示

这种是怎么做的呢?就是监听网络状态然后做出相应的处理,可以通过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类,在里面注册这个广播就行了,也别忘了在这里解除广播。



猜你喜欢

转载自blog.csdn.net/keep_my_mine/article/details/79271724