From d8945e534896c4a3af2c855c0bc5ad4ec69fe3f3 Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 7 May 2022 20:49:14 +0800 Subject: [PATCH] =?UTF-8?q?web=E6=9C=8D=E5=8A=A1=E7=9B=91=E6=B5=8B?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=8F=98=E5=8C=96,=E5=8F=8A=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/receiver/NetworkChangedListener.kt | 61 +++++++++++++++++++ .../app/receiver/NetworkChangedReceiver.kt | 25 -------- .../java/io/legado/app/service/WebService.kt | 12 ++-- 3 files changed, 68 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt delete mode 100644 app/src/main/java/io/legado/app/receiver/NetworkChangedReceiver.kt diff --git a/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt b/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt new file mode 100644 index 000000000..f27ef455c --- /dev/null +++ b/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt @@ -0,0 +1,61 @@ +package io.legado.app.receiver + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.ConnectivityManager +import android.net.Network +import android.os.Build +import splitties.systemservices.connectivityManager + +/** + * 监测网络变化 + */ +class NetworkChangedListener(private val context: Context) { + + var onNetworkChanged: (() -> Unit)? = null + + private val receiver: NetworkChangedReceiver? by lazy { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { + NetworkChangedReceiver() + } + return@lazy null + } + + fun register() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + connectivityManager.registerDefaultNetworkCallback( + object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + onNetworkChanged?.invoke() + } + } + ) + } else { + receiver?.let { + context.registerReceiver(it, it.filter) + } + } + } + + fun unRegister() { + receiver?.let { + context.unregisterReceiver(it) + } + } + + inner class NetworkChangedReceiver : BroadcastReceiver() { + + val filter = IntentFilter().apply { + @Suppress("DEPRECATION") + addAction(ConnectivityManager.CONNECTIVITY_ACTION) + } + + override fun onReceive(context: Context, intent: Intent) { + onNetworkChanged?.invoke() + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/receiver/NetworkChangedReceiver.kt b/app/src/main/java/io/legado/app/receiver/NetworkChangedReceiver.kt deleted file mode 100644 index 8c4f1db84..000000000 --- a/app/src/main/java/io/legado/app/receiver/NetworkChangedReceiver.kt +++ /dev/null @@ -1,25 +0,0 @@ -package io.legado.app.receiver - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import android.net.ConnectivityManager - -/** - * 监测网络变化 - */ -class NetworkChangedReceiver : BroadcastReceiver() { - - var onReceiver: ((context: Context, intent: Intent) -> Unit)? = null - - val filter = IntentFilter().apply { - @Suppress("DEPRECATION") - addAction(ConnectivityManager.CONNECTIVITY_ACTION) - } - - override fun onReceive(context: Context, intent: Intent) { - onReceiver?.invoke(context, intent) - } - -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/service/WebService.kt b/app/src/main/java/io/legado/app/service/WebService.kt index cd480a807..6949a55d2 100644 --- a/app/src/main/java/io/legado/app/service/WebService.kt +++ b/app/src/main/java/io/legado/app/service/WebService.kt @@ -10,7 +10,7 @@ import io.legado.app.constant.AppConst import io.legado.app.constant.EventBus import io.legado.app.constant.IntentAction import io.legado.app.constant.PreferKey -import io.legado.app.receiver.NetworkChangedReceiver +import io.legado.app.receiver.NetworkChangedListener import io.legado.app.utils.* import io.legado.app.web.HttpServer import io.legado.app.web.WebSocketServer @@ -36,7 +36,9 @@ class WebService : BaseService() { private var httpServer: HttpServer? = null private var webSocketServer: WebSocketServer? = null private var notificationContent = "" - private val networkChangedReceiver = NetworkChangedReceiver() + private val networkChangedListener by lazy { + NetworkChangedListener(this) + } override fun onCreate() { super.onCreate() @@ -44,8 +46,8 @@ class WebService : BaseService() { notificationContent = getString(R.string.service_starting) upNotification() upTile(true) - registerReceiver(networkChangedReceiver, networkChangedReceiver.filter) - networkChangedReceiver.onReceiver = { _, _ -> + networkChangedListener.register() + networkChangedListener.onNetworkChanged = { upWebServer() } } @@ -61,7 +63,7 @@ class WebService : BaseService() { override fun onDestroy() { super.onDestroy() - unregisterReceiver(networkChangedReceiver) + networkChangedListener.unRegister() isRun = false if (httpServer?.isAlive == true) { httpServer?.stop()