我希望能够在应用程序关闭时进行任何网络更改或任何网络连接丢失唤醒我的应用程序的绑定服务.过去通过在
Android Nougat中弃用之前侦听CONNECTIVITY_CHANGE广播来完成.只有当应用程序通过编程创建广播接收器打开时,人们仍然可以收听这些广播,但是如果关闭我的应用也需要被唤醒.
我注意到ConnectivityManager.registerNetworkCallback(NetworkRequest,PendingIntent)方法及其JavaDoc声称它在应用程序关闭时可以正常工作,但是当我从我的服务中调用它时,它似乎只能在它停止响应事件之前工作一次.我看到ConnectivityManager.registerNetworkCallback(NetworkRequest,NetworkCallback)的类似问题,这是一个仅适用于应用程序打开的Lollipop功能.如何让这个基于PendingIntent的回调始终如一?
谷歌建议取代CONNECTIVITY_CHANGE广播的所有替代品只是检查是否存在网络.其中大多数是作业调度服务.他们假设CONNECTIVITY_CHANGE广播仅用于等待网络可用性来执行作业.但是,我的应用程序是一个VPN网络实用程序,因此我需要在任何网络更改时收到通知 – 我不仅仅是在等待网络的存在.
谢谢你的帮助!
解决方法
您可以使服务实现
NetworkCallback接口,并在服务的onCreate或onStartCommand上使用
registerNetworkCallback注册您的回调/服务并在onDestroy上取消注册.
在回调中,例如onAvailable或onLost,您可以添加业务逻辑.