我想要什么:当互联网连接状态从关闭变为开启或反之亦然 - 即使应用程序未处于活动状态,我也想立即停止/启动服务。由于挂起的意图可能比调用应用程序的寿命更长,我认为这是可以实现的。
我正在尝试以这种方式使用ConnectivityManager.registerNetworkCallback
重载版本PendingIntent
:
有一个广播接收器NetworkStatusReceiver
应该接收与网络事件相关的意图:
class NetworkStatusReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "something's changed", Toast.LENGTH_SHORT).show();
}
}
在 AndroidManifest.xml 中注册接收器:
<receiver android:name=".NetworkStatusReceiver"
android:enabled="true"
android:exported="true"/>
最后制作一个待处理的意图并将其注册为网络回调:
val builder = NetworkRequest.Builder()
builder.addTransportType(NetworkCapabilitties.TRANSPORT_CELLULAR)
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
val networkRequest = builder.build()
val intent = Intent(context, NetworkStatusReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
val connectivityManager = context.getSystemService(ConnectivityManager::class.java)
connectivityManager.registerNetworkCallback(networkRequest, pendingIntent)
问题
当互联网连接最初关闭时 -NetworkStatusReceiver
当它变为 ON 时接收意图。即使应用程序已被杀死。好的,这样(OFF -> ON)它可以工作。但!当互联网连接在 的时刻处于活动状态时registerNetworkCallback
,NetworkStatusReceiver
立即接收到意图。我虽然只有在某些事情发生变化时才会调用回调。但在这种情况下,即使没有任何变化,它也会立即被调用。出于这个原因,我无法跟踪 ON -> OFF 事件。
任何想法,我做错了什么?即使这样,如何跟踪 ON -> OFF?似乎使用registerNetworkCallback
withPendingIntent
不是很流行,所以关于它的使用信息非常稀少。