【问题标题】:How to receive callbacks on network loss for Android Nougat when app is closed?应用程序关闭时如何接收 Android Nougat 网络丢失的回调?
【发布时间】:2017-02-05 20:04:26
【问题描述】:

我希望能够在应用关闭时让任何网络更改或任何网络连接丢失唤醒我的应用绑定的服务。这过去是通过监听 CONNECTIVITY_CHANGE 广播来完成的,然后在 Android Nougat 中已弃用。通过以编程方式创建广播接收器,只有在应用打开时,人们可能仍会收听这些广播,但我的应用在关闭时也需要唤醒。

我注意到 ConnectivityManager.registerNetworkCallback(NetworkRequest, PendingIntent) 方法和它的 JavaDoc 声称它在应用程序关闭时工作,但是当我从我的服务调用它时,它似乎只工作一次就停止响应事件。我看到 ConnectivityManager.registerNetworkCallback(NetworkRequest, NetworkCallback) 的类似问题,这是一个仅在应用程序打开时才有效的棒棒糖功能。如何让这个基于 PendingIntent 的回调始终如一地工作?

Google 建议的所有替代 CONNECTIVITY_CHANGE 广播的方法只是检查网络是否存在。其中大部分是作业调度服务。他们假设 CONNECTIVITY_CHANGE 广播仅用于等待网络可用性以执行工作。但是,我的应用程序是一个 VPN 网络实用程序,因此我需要在任何网络更改时收到通知——我不只是在等待网络的存在。

感谢您的帮助!

【问题讨论】:

    标签: android networking broadcastreceiver android-networking android-7.0-nougat


    【解决方案1】:

    您可以让您的服务实现NetworkCallback 接口,并在服务的onCreateonStartCommand 上使用registerNetworkCallback 注册您的回调/服务并取消注册onDestroy

    onAvailableonLost 等回调中,添加业务逻辑。

    【讨论】:

    • 正如我所提到的,当应用程序关闭时,这似乎无法可靠地工作。也许关闭电池优化是正确的答案,但我已经在问题中尝试过这个答案。
    • 我明白了,没有意识到你想在连接发生变化时启动你的服务。从官方文档中查看link,其中说明了如何实现这一目标。 TLDR:使用 setRequiredNetworkType 安排作业
    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2013-07-04
    • 2018-03-12
    • 2012-02-22
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多