diff --git a/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt b/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt index f27ef455c..12de57e90 100644 --- a/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt +++ b/app/src/main/java/io/legado/app/receiver/NetworkChangedListener.kt @@ -23,15 +23,22 @@ class NetworkChangedListener(private val context: Context) { return@lazy null } - fun register() { + private val networkCallback: ConnectivityManager.NetworkCallback? by lazy { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - connectivityManager.registerDefaultNetworkCallback( - object : ConnectivityManager.NetworkCallback() { - override fun onAvailable(network: Network) { - onNetworkChanged?.invoke() - } + return@lazy object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + onNetworkChanged?.invoke() } - ) + } + } + return@lazy null + } + + fun register() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + networkCallback?.let { + connectivityManager.registerDefaultNetworkCallback(it) + } } else { receiver?.let { context.registerReceiver(it, it.filter) @@ -40,8 +47,14 @@ class NetworkChangedListener(private val context: Context) { } fun unRegister() { - receiver?.let { - context.unregisterReceiver(it) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + networkCallback?.let { + connectivityManager.unregisterNetworkCallback(it) + } + } else { + receiver?.let { + context.unregisterReceiver(it) + } } }