安卓(kotlin)实现实时监听网络变化
要想实现监听手机网络的连接情况,在断网时能够及时提醒用户,我们可以注册一个广播接收器,然后对手机网络变化进行实时监听。
- 首先,我们先新建一个类继承BroadcastReceiver
IntentReceiver.kt主要代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class IntentRecevier() : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val manager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkInfo = manager.activeNetworkInfo
// 判断网络情况
if (networkInfo != null && networkInfo.isAvailable) {
// 网络可用时的执行内容
} else {
// 网络不可用时的执行内容
Toast.makeText(context, "network connect fail", Toast.LENGTH_SHORT).show()
}
}
} - 然后在activity文件的onCreate函数中引用它
1
2
3intentRecevier = IntentRecevier() // intentRecevier定义为全局变量
var filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
this.registerReceiver(intentRecevier,filter) - 记得在activity的onDestory函数中注销它,不然则可能导致已经注册的receiver 没有在合适的时机注销,导致内存泄漏,占用内存空间,加重 SystemService负担。以上使用到的api需要申请权限,所以在AndroidManifect.xml添加
1
unregisterReceiver(intentRecevier)
自己可以根据实际的项目需求进行修改,包括向IntentRecevier传参,注册和注销所在的生命周期也可以视实际情况修改。1
2
3<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
但是,使用以上某些方法的时候你会发现activeNetworkInfo在更高版本的api已经被弃用了,这时该肿么办。
我们现在需要使用ConnectivityManager.NetworkCallback API 或者 ConnectivityManager#getNetworkCapabilities 或者 ConnectivityManager#getLinkProperties替代它。
1 | class IntentRecevier() : BroadcastReceiver() { |