Android网络状态监控

网络状态判断类

/**
 * Created by Notzuonotdied on 2016/10/31.
 * 网络状态判断
 */
public class NetWorkUtils {
    private static final int NET_TYPE_WIFI = 1;
    private static final int NET_TYPE_MOBILE = 0;
    public static final int NET_TYPE_NO_NETWORK = -1;

    public Context context = null;

    public NetWorkUtils() {

    }

    public NetWorkUtils(Context context) {
        this.context = context;
    }

    public static MyApplication getApplication() {
        return MyApplication.getInstance();
    }

    /**
     * 判断是否联网
     */
    public static boolean isConnectNET(final Context context) {
        final ConnectivityManager conManage = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo networkInfo = conManage.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isAvailable()) {
            return true;
        } else {
            Toast.makeText(context, "断网了,请检查网络~", Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    /**
     * 判断是否是WIFI连接
     */
    public static boolean isConnectWIFI() {
        final ConnectivityManager conManage = (ConnectivityManager)
                getApplication().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = conManage.getActiveNetworkInfo();
        int netType = networkInfo != null ? networkInfo.getType() : -1;
        return netType == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected();
    }

    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 NET_TYPE_WIFI;
            } else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
                return NET_TYPE_MOBILE;
            }
        }
        return NET_TYPE_NO_NETWORK;
    }

    public static boolean isNetworkAviable(Context context) {
        int state = getNetWorkState(context);
        return state == 0 || state == 1;
    }

    public static void whenNetworkError() {
        Intent intent = new Intent();
        intent.setClass(getApplication(), NetWorkErrorActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplication().startActivity(intent);
    }
}

NetBroadcastReceiver

需要添加网络权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

注册

 <receiver
    android:name=".Service.NetBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
 </receiver>

在需要监听网络的类中

implements NetBroadcastReceiver.netEventHandler

在Acitivity中的onCreate(),在Fragment中的onCreateView()中

 // 注册
NetBroadcastReceiver.mListeners.add(this);
public class NetBroadcastReceiver extends BroadcastReceiver {

    public static ArrayList<netEventHandler> mListeners = new ArrayList<>();

    @Override
    public void onReceive(Context context, Intent intent) {
        // 如果相等的话说明网络发生了变化
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            MyApplication.mNetWorkState = NetWorkUtils.getNetWorkState(context);
            if (mListeners.size() > 0)// 通知接口完成加载
                for (netEventHandler handler : mListeners) {
                    handler.onNetChange();
                }
        }
    }

    public interface netEventHandler {
        void onNetChange();
    }
}

MyApplication

在自定义的Application中保存网络状态

/**
 * Created by Notzuonotdied on 2016/8/6.
 * 全局变量类
 */
public class MyApplication extends Application {
    public static int mNetWorkState;
    private static MyApplication myApplication;

    public static MyApplication getInstance() {
        return myApplication;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        initNETService();
    }

    public void initNETService() {
        mNetWorkState = NetWorkUtils.getNetWorkState(MyApplication.this);
    }
}

在类中的定义方法

/**
 * Created by Notzuonotdied on 2017/3/11.
 */

public class TestActivity extends Activity implements NetBroadcastReceiver.netEventHandler {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 注册
        NetBroadcastReceiver.mListeners.add(this);
    }

    @Override
    public void onNetChange() {
        // 当由无网络变为有网络的时候执行该方法
        if (MyApplication.mNetWorkState != NetWorkUtils.NET_TYPE_NO_NETWORK) {
            // ...
        }
    }
}
/**
 * Created by Notzuonotdied on 2017/3/11.
 */
public class TestFragment extends Fragment implements NetBroadcastReceiver.netEventHandler {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        // 注册
        NetBroadcastReceiver.mListeners.add(this);
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onNetChange() {
        // 当由无网络变为有网络的时候执行该方法
        if (MyApplication.mNetWorkState != NetWorkUtils.NET_TYPE_NO_NETWORK) {
            // ...
        }
    }
}

附录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值