关于监听网络状态变化,记录而已

在我们平常开发中,有很多场景需要监听网络状态的变化。今天,我们来实现该功能。大致效果如下:
这里写图片描述

<!-- ---------------------卖萌的分割线--------------------- -->

首先我们先看一下大概Demo结构:
包结构

既然涉及到网络,因此我们需要在AndroidManifest文件中添加以下权限:

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

接下来,贴一下NetUtils类的代码,该类主要用于判断目前网络状态,代码不复杂,直接上代码:

package network;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetUtils {

    // 判断网络连接状态
    public static boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager
                    .getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    // 判断wifi状态
    public static boolean isWifiConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mWiFiNetworkInfo = mConnectivityManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (mWiFiNetworkInfo != null) {
                return mWiFiNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    // 判断移动网络
    public static boolean isMobileConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mMobileNetworkInfo = mConnectivityManager
                    .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (mMobileNetworkInfo != null) {
                return mMobileNetworkInfo.isAvailable();
            }
        }
        return false;
    }

    // 获取连接类型
    public static int getConnectedType(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager
                    .getActiveNetworkInfo();
            if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
                return mNetworkInfo.getType();
            }
        }
        return -1;
    }
}

接下来是NetReceiver类,该类是广播接收器,用于接收网络状态变化的广播,直接贴代码:

package receiver;

import interf.IChangeTextCallback;
import network.NetUtils;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;

public class NetReceiver extends BroadcastReceiver {

    private IChangeTextCallback mCallback;

    public NetReceiver(IChangeTextCallback callback) {
        this.mCallback = callback;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
            boolean isConnected = NetUtils.isNetworkConnected(context);
            System.out.println("网络状态:" + isConnected);
            System.out.println("wifi状态:" + NetUtils.isWifiConnected(context));
            System.out.println("移动网络状态:" + NetUtils.isMobileConnected(context));
            System.out.println("网络连接类型:" + NetUtils.getConnectedType(context));
            /*
             * if (isConnected) { Toast.makeText(context, "已经连接网络",
             * Toast.LENGTH_LONG).show(); } else { Toast.makeText(context,
             * "已经断开网络", Toast.LENGTH_LONG).show(); }
             */
            if (NetUtils.isWifiConnected(context)) {
                mCallback.setText("wifi");
            } else if (NetUtils.isMobileConnected(context)) {
                mCallback.setText("移动网络");
            } else if (!isConnected) {
                mCallback.setText("无网络");
            }
        }
    }

}

接下来是MainActivity,该Activity布局就只是一个简单的TextView,我们在这里实现了IChangeTextCallback回调接口,用于传入上面的Receiver回调更改Activity的UI。代码如下:

package com.example.nettest;

import interf.IChangeTextCallback;
import receiver.NetReceiver;
import android.app.Activity;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity implements IChangeTextCallback {

    NetReceiver mReceiver = new NetReceiver(this);
    IntentFilter mFilter = new IntentFilter();
    private TextView mTextview;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextview = (TextView) this.findViewById(R.id.text);

        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, mFilter);
    }

    @Override
    protected void onDestroy() {
        unregisterReceiver(mReceiver);
        super.onDestroy();
    }

    @Override
    public void setText(String text) {
        mTextview.setText(text);
    }
}

最后是IChangeTextCallback回调接口,很简单就一行代码:

package interf;

public interface IChangeTextCallback {
    public void setText(String text);
}

这样 ,我们就实现了Android对网络状态的实时监听以及做出相对应的操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值