Android应用实时监听网络状态

在Android开发中我们肯定会遇到需要监听网络状态的时候,那我们应该怎么实现呢?
老规矩先上效果图
在这里插入图片描述

实现思路,使用广播监听网络状态,接口回调展示状态。

首先我们需要用到的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取当前wifi状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 允许程序改变网络连接状态 -->

NetworkChangeReceiver类
使用new BroadcastReceviver创建receiver

class NetworkChangeReceiver : BroadcastReceiver() {
  private val TAG = "NetworkChangeReceiver"
  private var typeName = "" //记录网络状态字符串

  override fun onReceive(context: Context, intent: Intent) {
  val connectivityManager =
  context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
  val networkInfo = connectivityManager.activeNetworkInfo
  if (networkInfo == null) {
  // WIFI 和 移动网络都关闭 即没有有效网络
  typeName = "当前无网络连接"
  if (callBackNetWork != null) {
  callBackNetWork!!.callBack(typeName)
 }  Log.e(TAG, "当前无网络连接")
  return
  }
  if (networkInfo.type == ConnectivityManager.TYPE_WIFI) {
  /* typeName = networkInfo.getTypeName();//==> WIFI*/
  typeName = "当前正在使用WIFI" //==> WIFI
  } else if (networkInfo.type == ConnectivityManager.TYPE_MOBILE) {
  /*  typeName=networkInfo.getTypeName();*/
  typeName = "当前正在使用数据" //==> WIFI
  }
  if (callBackNetWork != null) {
  callBackNetWork!!.callBack(typeName)
 } }
  private var callBackNetWork: CallBackNetWork? = null

 fun setCallBackNetWork(callBackNetWork: CallBackNetWork?) { //公开接口 能访问接口
  this.callBackNetWork = callBackNetWork
  }

  interface CallBackNetWork {
  fun callBack(str: String?)
 }
}

在Activity界面中实例化广播

class MainActivity : AppCompatActivity() {
  lateinit var intentFilter: IntentFilter
  lateinit var networkChangeReceiver: NetworkChangeReceiver

  override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)
  networkChangeReceiver = NetworkChangeReceiver()
  intentFilter = IntentFilter()
  intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
  registerReceiver(networkChangeReceiver, intentFilter)
  networkChangeReceiver.setCallBackNetWork(object : NetworkChangeReceiver.CallBackNetWork {
  override fun callBack(str: String?) {
  showNetWork.text = str
  }
 }) }}

附上项目源码:项目源码

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WormholeStack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值