From addf8e1950d4112a7562bf506285ec29f8921c05 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Tue, 16 Feb 2016 19:41:44 +0100 Subject: [PATCH] Ignore sticky network intent. --- .../ensichat/util/NetworkChangedReceiver.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/android/src/main/scala/com/nutomic/ensichat/util/NetworkChangedReceiver.scala b/android/src/main/scala/com/nutomic/ensichat/util/NetworkChangedReceiver.scala index 1607c3f..5f49fde 100644 --- a/android/src/main/scala/com/nutomic/ensichat/util/NetworkChangedReceiver.scala +++ b/android/src/main/scala/com/nutomic/ensichat/util/NetworkChangedReceiver.scala @@ -1,11 +1,28 @@ package com.nutomic.ensichat.util import android.content.{BroadcastReceiver, Context, Intent} +import android.net.ConnectivityManager import com.nutomic.ensichat.service.ChatService +/** + * Forwards network changed intents to [[ChatService]]. + * + * HACK: Because [[ConnectivityManager.CONNECTIVITY_ACTION]] is a sticky intent, and we register it + * from Scala, an intent is sent as soon as the receiver is registered. As a workaround, we + * ignore the first intent received. + * Alternatively, we can register the receiver in the manifest, but that will start the + * service (so it only works if the service runs permanently, with no exit). + */ class NetworkChangedReceiver extends BroadcastReceiver { + private var isFirstIntent = true + override def onReceive(context: Context, intent: Intent): Unit = { + if (isFirstIntent) { + isFirstIntent = false + return + } + val intent = new Intent(context, classOf[ChatService]) intent.setAction(ChatService.ActionNetworkChanged) context.startService(intent)