应用程序关闭时如何接收 Android Nougat 网络丢失的回调?

Posted

技术标签:

【中文标题】应用程序关闭时如何接收 Android Nougat 网络丢失的回调?【英文标题】:How to receive callbacks on network loss for Android Nougat when app is closed? 【发布时间】: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 广播仅用于等待网络可用性以执行工作。但是,我的应用程序是一个 *** 网络实用程序,因此我需要在任何网络更改时收到通知——我不只是在等待网络的存在。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

正如我所提到的,当应用程序关闭时,这似乎无法可靠地工作。也许关闭电池优化是正确的答案,但我已经在问题中尝试过这个答案。 我明白了,没有意识到你想在连接发生变化时启动你的服务。从官方文档中查看link,其中说明了如何实现这一目标。 TLDR:使用 setRequiredNetworkType 安排作业

以上是关于应用程序关闭时如何接收 Android Nougat 网络丢失的回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何接收应用程序停止或设备关闭时发送的 GCM 推送通知?

屏幕关闭时,前台服务未在 Android 7.0+ 中接收位置更新

应用程序关闭后,用于媒体控件的 Android 广播接收器停止工作

单击外部时如何关闭Android对话框(使用FLAG_NOT_FOCUSABLE)

从 Android gcm 服务器接收重复的推送通知 [关闭]

android quickBlox 视频通话代码强制关闭点击接收按钮点击