CONNECTIVITY_ACTION在API 28中已被弃用,Google建议使用registerNetworkCallback(NetworkRequest, PendingIntent)。
我尝试使用ConnectivityManager.NetworkCallback进行registerNetworkCallback,它可以工作,但我想使用PendingIntent。
困扰我的是public void registerNetworkCallback(NetworkRequest request, PendingIntent operation)的描述:
操作是一个Intent广播,发送到您使用Context#registerReceiver注册的广播接收器或通过AndroidManifest.xml文件中的标记。
Context#registerReceiver
接受IntentFilter
作为参数,而PendingIntent.getBroadcast
需要Intent
。
这是我的代码,但NetworkStateReceiver::onReceive没有被调用。
private fun getNetworkIntent(): PendingIntent {
if (networkPendingIntent != null) {
return networkPendingIntent!!
}
val intent = Intent(this, NetworkStateReceiver::class.java)
networkPendingIntent = PendingIntent.getBroadcast(
this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
return networkPendingIntent!!
}
private fun getNetworkRequest(): NetworkRequest {
return NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build()
}
private fun registerNetworkUpdates() {
var cm =
applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
cm?.registerNetworkCallback(getNetworkRequest(), getNetworkIntent())
}
为什么我还需要调用
Context#registerReceiver
?但是如果CONNECTIVITY_ACTION
已被弃用,那我应该使用什么IntentFilter
呢?