Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将registerNetworkCallback与PendingContent一起使用?_Java_Android_Kotlin - Fatal编程技术网

Java 如何将registerNetworkCallback与PendingContent一起使用?

Java 如何将registerNetworkCallback与PendingContent一起使用?,java,android,kotlin,Java,Android,Kotlin,在API级别28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)时被弃用 我尝试使用registerNetworkCallback,它可以工作,但我想使用PendingContent 让我困惑的是以下描述: 该操作是发送到广播接收器的意图广播 您在Context#registerReceiver或通过 AndroidManifest.xml文件中的标记 Context#registerReceiver接受Intent

在API级别28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)时被弃用

我尝试使用registerNetworkCallback,它可以工作,但我想使用PendingContent

让我困惑的是以下描述:

该操作是发送到广播接收器的意图广播 您在Context#registerReceiver或通过 AndroidManifest.xml文件中的标记

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工作?