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

时间:2016-09-28 03:06:52

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

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

我注意到ConnectivityManager.registerNetworkCallback(NetworkRequest,PendingIntent)方法及其JavaDoc声称它在应用程序关闭时可以正常工作,但是当我从我的服务中调用它时,它似乎只能在它停止响应之前工作一次事件。我看到了ConnectivityManager.registerNetworkCallback(NetworkRequest,NetworkCallback)的类似问题,这是一个仅适用于应用程序打开的Lollipop功能。如何让这个基于PendingIntent的回调始终如一地工作?

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以使服务实现NetworkCallback接口,并在服务的 onCreate onStartCommand 上使用{{3}注册您的回调/服务},然后在 onDestroy 上注销。

在诸如 onAvailable onLost 之类的回调中,添加业务逻辑。