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
  }
 }) }}

附上项目源码:项目源码

猜你喜欢

转载自blog.csdn.net/qq_35416214/article/details/106264245