在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
}
}) }}
附上项目源码:项目源码