当前位置: 首页 > 知识库问答 >
问题:

如何将registerNetworkCallback与PendingContent一起使用?

凤衡
2023-03-14

API level 28和Google建议使用registerNetworkCallback(NetworkRequest,PendingIntent)不推荐CONNECTIVITY\u操作。

我尝试使用ConnectionManager注册了registerNetworkCallback。NetworkCallback和它的工作,但我想使用PendingContent。

让我困惑的是公共空寄存器NetworkCallback(NetworkRequest请求,PendingIntent操作)的描述:

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

registerReceiver接受IntentFilter作为参数,而PendingIntent作为参数。getBroadcast需要意图。

这是我的代码,没有调用NetworkStateRecencer::onReception。

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#ynsterRecencer吗?但是如果CONNECTIVITY_ACTION已弃用,我应该对IntentFilter使用什么操作?

共有1个答案

贲骏喆
2023-03-14

最后我让它工作。首先,我需要将接收器添加到AndroidManifest.xml

<receiver 
        android:name=".NetworkStateReceiver"
        android:enabled="true"
        android:exported="true" />

其次,当连接离线并变得可用时,仅调用一次。因此,每次当连接离线时我需要发送任何内容时,我都必须调用寄存器NetworkUpdate

第三,我必须在调用registerNetworkCallback之前调用unregisterNetworkCallback。如果我以相同的意图调用了两次registerNetworkCallback,则会调用两次NetworkStateReceiver onReceive。在创建PendingContent时,我使用了applicationContext而不是this。获取广播。

 类似资料:
  • 我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。

  • 我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理

  • 我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。

  • 问题内容: 当我尝试将Webpack与简单的Express服务器一起使用时,总是会收到大量错误消息: express.js 我得到所有这些错误: 这是我的配置文件: 我该怎么办,我还需要在服务器端使用webpack。 我像这样运行express.js文件: 问题答案: 我最终要做的是,我使用了两种不同的配置,一种用于使用webpack将服务器内容打包在一起,另一种用于将所有浏览器内容打包在一起,并

  • 我有两个多对多关系的实体。 在类角色中: java.lang.StackOverflowError:空 我该如何解决这个问题?我在Stackoverflow上看到了类似的问题,但我没有找到真正有效的解决方案。 Upd:抛出异常的位置:

  • 我真的不明白我应该从< code>trackBy返回什么。根据我在网上看到的一些例子,我应该返回对象的一些属性值。对不对?为什么我应该获取< code>index作为参数? 例如在以下情况下: 组件.组件. ts 组件.模板.html 尽管名称未更改,此模板中显示的对象仍会更新。为什么?