android网络请求网络连接状态判断 & 监控网络状态改变

个人笔记

开发遇到的网络判断思路

        不能每次网络请求都要去调用ConnectivityManager进行网络判断,所以在程序启动的时候判断一次网络状态,然后全局记录这个状态,每次网络请求的时候只用根据这个记录的状态来判断网络的连接状态即可,只有当人为的关闭网络或者切换网络的时候才改变全局的记录状态,这个改变使用到广播。

广播收听网络改变状态:

package com.huiting.receiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State ;

import com.huiting.application.BaseApplication;
import com.huiting.tools.LogUtils;

/**
 * 网络改变监控广播
 *
 * 监听网络的改变状态,只有在用户操作网络连接开关(wifi,mobile)的时候接受广播,然后对相应的界面进行相应的操作
 * 适用于下载时候,听音乐过程中
 *
 * Created by zst on 16/1/27.
 */
public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        State wifiState = null;
        State mobileState = null;

        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        wifiState = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
        mobileState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

        LogUtils.d("网络改变(NetworkChangeReceiver)", "wifi状态:" + wifiState + "\n mobile状态:" + mobileState);

        if (wifiState != null && mobileState != null
                && State.CONNECTED != wifiState
                && State.CONNECTED == mobileState) {// 手机网络连接成功
            LogUtils.d("网络改变(NetworkChangeReceiver)", "手机2g/3g/4g网络连接成功");

            BaseApplication.getInstance().setIsMobile(true);
            BaseApplication.getInstance().setIsWifi(false);
            BaseApplication.getInstance().setIsNetworkConn(true);

        } else if (wifiState != null && State.CONNECTED == wifiState) {// 无线网络连接成功
            LogUtils.d("网络改变(NetworkChangeReceiver)", "无线网络连接成功");

            BaseApplication.getInstance().setIsMobile(false);
            BaseApplication.getInstance().setIsWifi(true);
            BaseApplication.getInstance().setIsNetworkConn(true);

        } else if (wifiState != null && mobileState != null
                && State.CONNECTED != wifiState
                && State.CONNECTED != mobileState) {// 手机没有任何的网络
            LogUtils.d("网络改变(NetworkChangeReceiver)", "手机没有任何的网络");

            BaseApplication.getInstance().setIsMobile(false);
            BaseApplication.getInstance().setIsWifi(false);
            BaseApplication.getInstance().setIsNetworkConn(false);

        }

    }

}

Application记录状态,启动app时候这里也进行一次网络判断和记录:

/**
 * 当前应用程序
 * 必须在AndroidManifest.xml中写在application中
 * Created by zst on 15/12/17.
 */
public class BaseApplication extends Application {
    //固定值-使用private防止别的程序修改这些值,然后使用下面的public方法向外边提供这些值,static一般是不需要二次修改的
    private static BaseApplication application;
    private static int mainTid;//程序运行线程id
    private static Handler handler;
    private static TelephonyManager telephonyManager;//设备标示符

    //网路连接
    private boolean isWifi;//wifi是否连接
    private boolean isMobile;//手机是否连接
    private boolean isNetworkConn;//是否有网



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beluga_白鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值