android:检测网络连接状态

现在的app,不访问网络的基本上没有了。在访问网络前检测一下网络连接以避免访问网络时的操作还是很有必要的。
检测网络连接一般由ConnectivityManager实现。实现方式有两种:主动检测,被动监听。

一、被动监听(实时监听)

        在网络连接改变的时候要改变界面或者其他操作,但是没有请求网络这个操作,这就要写一个监听。在网络连接状态转换的时候发一个广播,然后调用回调方法。实现代码如下:

  • 广播实现
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * Created by yushan on 2017-5-18.
 */
public class ConnectionChangeReceiver extends BroadcastReceiver {

    private Boolean connectState;

    private OnStateChangedListener mOnStateChangedListener;

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null){
            // 手机信号/3G/4G
            NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            // Wifi
            NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
                mOnStateChangedListener.onStateChanged(false);
            } else {
                mOnStateChangedListener.onStateChanged(true);
            }
        } else {
            mOnStateChangedListener.onStateChanged(false);
        }
    }


    public void setOnStateChangedListener(OnStateChangedListener mOnStateChangedListener) {
        this.mOnStateChangedListener = mOnStateChangedListener;
    }

    /**
     * 状态改变的监听器
     */
    public interface OnStateChangedListener {
        /**
         * 状态改变时,回调方法
         *
         * @param state
         */
        void onStateChanged(boolean state);
    }

}
  • 在使用的类中注册广播
    private void registerReceiver(){
        IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        myReceiver = new ConnectionChangeReceiver();
        this.registerReceiver(myReceiver, filter);
        myReceiver.setOnStateChangedListener(new ConnectionChangeReceiver.OnStateChangedListener() {
            @Override
            public void onStateChanged(boolean state) {
                if (state){
                    // 有网络连接 进行什么操作
                    Toast.makeText(MainActivity.this,"state:" + state,Toast.LENGTH_SHORT).show();
                } else {
                    // 无网络连接 进行什么操作
                    Toast.makeText(MainActivity.this,"state:" + state,Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
  • 在适当的位置注销广播
    private void unregisterReceiver(){
        if (myReceiver != null){
            this.unregisterReceiver(myReceiver);
        }
    }

二、主动检测

        在每次访问网络之前主动获取一下网络连接状态,我们只要在上面中的代码中做一下改动就可以了,实现代码如下:

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null){
            // 手机信号/3G/4G
            NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            // Wifi
            NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
                connectState = false;
                mOnStateChangedListener.onStateChanged(false);
            } else {
                connectState = true;
                mOnStateChangedListener.onStateChanged(true);
            }
        } else {
            connectState = false;
            mOnStateChangedListener.onStateChanged(false);
        }
    }

    public Boolean getConnectState(){
        return connectState;
    }

检测网络连接状态就到这里了,虽然很简单,但是比较实用,希望这篇博客能为你提供一些帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值