Android简单实现实时监听网络状态

来源:互联网 发布:淘宝优惠券微信群 编辑:程序博客网 时间:2024/06/13 03:56

先简单说一下思路:网络变化时系统会发出广播。所以我们监听这个广播,利用接口回调通知activity做相应的操作就好了。

思路

  • 判断网络状态(写个工具类NetUtil)

  • 写个类继承BroadcastReceiver(不要忘记在清单文件中注册)

  • 需要在清单文件中添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  • 回调接口(NetEvevt)

  • BaseActivity实现这个接口

直接上代码

import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;/** * Created by Hoban on 2017/11/15. */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) {        // 得到连接管理器对象        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;    }}
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;/** * Created by Hoban on 2017/11/15. */public class NetBroadcastReceiver extends BroadcastReceiver {    public NetEvevt evevt = BaseActivity.evevt;    @Override    public void onReceive(Context context, Intent intent) {        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {            int netWorkState = NetUtil.getNetWorkState(context);            // 接口回调传过去状态的类型            evevt.onNetChange(netWorkState);        }    }    // 自定义接口    public interface NetEvevt {        public void onNetChange(int netMobile);    }}
import android.os.Bundle;import android.view.View;import android.widget.ListView;import android.widget.TextView;/** * Created by Hoban on 2017/11/15. */public class MainActivity extends BaseActivity {    private TextView textView,txtView;    ListView listView;  //声明一个ListView对象    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textView= (TextView) findViewById(R.id.textView);        txtView=(TextView)this.findViewById(R.id.txtView);        //启动时判断网络状态        boolean netConnect = this.isNetConnect();        if (netConnect){            textView.setVisibility(View.GONE);            txtView.setText("网络连接正常");        }else {            textView.setVisibility(View.VISIBLE);            txtView.setText("网络连接异常");        }    }    @Override    public void onNetChange(int netMobile) {        super.onNetChange(netMobile);        //网络状态变化时的操作        if (netMobile==NetUtil.NETWORK_NONE){            textView.setVisibility(View.VISIBLE);            txtView.setText("网络连接异常");        }else {            textView.setVisibility(View.GONE);            txtView.setText("网络连接正常");        }    }}

做了个Demo供大家参考 Demo下载