美文网首页
Android 实时监测网络,网络变化监听 适配7.0

Android 实时监测网络,网络变化监听 适配7.0

作者: 小婷婷tt | 来源:发表于2019-05-27 16:27 被阅读0次

    链接:(https://www.jianshu.com/p/89e3fbd33964)

    一、编写判断网络帮助类 NetUtil

    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;//wifi

          } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {

                return NETWORK_MOBILE;//mobile

          }

      } else {

            //网络异常

            return NETWORK_NONE;

      }

        return NETWORK_NONE;

    }

    二、编写检测网络变化广播类

    public class NetBroadcastReceiver extends BroadcastReceiver {

        public NetChangeListener listener = BaseActivity.listener;

        @Override

        public void onReceive(Context context, Intent intent) {

            // TODO Auto-generated method stub

            // 如果相等的话就说明网络状态发生了变化

            Log.i("NetBroadcastReceiver", "NetBroadcastReceiver changed");

            if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {

                int netWorkState = NetUtil.getNetWorkState(context);

                // 当网络发生变化,判断当前网络状态,并通过NetEvent回调当前网络状态

                if (listener != null) {

                    listener.onChangeListener(netWorkState);

                }

            }

        }

        // 自定义接口

        public interface NetChangeListener {

            void onChangeListener(int status);

        }

    }

    三、注册广播

    <receiver android:name=".network.NetBroadcastReceiver">

        <intent-filter>

            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

        </intent-filter>

    </receiver>

    这里有一个问题,在Android 7.0之静态注册广播的方式被取消了,所以我们这里采用动态注册的方式

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

        //实例化IntentFilter对象

        IntentFilter filter = new IntentFilter();

        filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

        netBroadcastReceiver = new NetBroadcastReceiver();

        //注册广播接收

        registerReceiver(netBroadcastReceiver, filter);

    }

    四、创建一个回调当前网络状态值的接口类

    // 自定义接口

    public interface NetChangeListener {

        void onChangeListener(int status);

    }

    五、并在BaseActivity中实现该接口,广播检测到网络变化时,通过onChangeListener回调当前网络状态至BaseActivity

    /**

    * 网络变化之后的类型

    */

    @Override

    public void onChangeListener(int netMobile) {

        // TODO Auto-generated method stub

        this.netType = netMobile;

        Log.i("netType", "netType:" + netMobile);

        if (!isNetConnect()) {

            showNetDialog();

            T.showShort("网络异常,请检查网络");

        } else {

            hideNetDialog();

            T.showShort("网络恢复正常");

        }

    }

    六、这里写了个dialog用来提示网络的变化 showNetDialog() 和 hideNetDialog()分别用来显示和隐藏dialog

    /**

    * 弹出设置网络框

    */

    private void showNetDialog() {

        if (alertDialog == null) {

            alertDialog = new MyAlertDialog(this).builder().setTitle("网络异常")

                    .setNegativeButton("取消", new OnClickListener() {

                        @Override

                        public void onClick(View view) {

                        }

                    }).setPositiveButton("设置", new OnClickListener() {

                        @Override

                        public void onClick(View view) {

                            Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);

                            startActivity(intent);

                        }

                    }).setCancelable(false);

        }

        alertDialog.show();

        showMsg("网络异常,请检查网络");

    }

    七、通过Intent跳转到网络设置页面

    Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);

    startActivity(intent);

    相关文章

      网友评论

          本文标题:Android 实时监测网络,网络变化监听 适配7.0

          本文链接:https://www.haomeiwen.com/subject/xdhzbqtx.html