Java 如何将registerNetworkCallback与PendingContent一起使用?
在API级别28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)时被弃用 我尝试使用registerNetworkCallback,它可以工作,但我想使用PendingContent 让我困惑的是以下描述: 该操作是发送到广播接收器的意图广播 您在Context#registerReceiver或通过 AndroidManifest.xml文件中的标记Java 如何将registerNetworkCallback与PendingContent一起使用?,java,android,kotlin,Java,Android,Kotlin,在API级别28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)时被弃用 我尝试使用registerNetworkCallback,它可以工作,但我想使用PendingContent 让我困惑的是以下描述: 该操作是发送到广播接收器的意图广播 您在Context#registerReceiver或通过 AndroidManifest.xml文件中的标记 Context#registerReceiver接受Intent
Context#registerReceiver
接受IntentFilter
作为参数,而pendingent.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())
}
为什么??
我是否也应该调用
上下文#registerReceiver
?但是,如果连接性\u操作
被弃用,我应该对IntentFilter
使用什么操作呢?最后我让它工作了。首先,我需要将接收器添加到AndroidManifest.xml
<receiver
android:name=".NetworkStateReceiver"
android:enabled="true"
android:exported="true" />
其次,networkstateceiver#onReceive
仅在连接脱机且可用时调用一次。因此,当连接脱机时,每次需要发送任何内容时,我都必须调用registerNetworkUpdates
第三,我必须在调用
registerNetworkCallback
之前调用unregisterNetworkCallback
。如果我以相同的意图调用了registerNetworkCallback
两次,则会调用两次NetworkStateReceiver\onReceive
。在创建pendingent.getBroadcast时,我使用了applicationContext
而不是this
,一旦我用pendingent注册了这样的回调,即使网络没有改变,接收者也会立即得到它。只有当网络发生变化时,您如何使if工作?