DefaultNetworkCallback для проверки подключения к сети, а не успешного обновления глобальной переменной состояния
Я использовал connectivityManager.registerDefaultNetworkCallback для проверки подключения к Интернету. Я дал<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
в моем AndroidManifest.xml
Я проверяю переменную для сетевого подключения, так как
class App : Application() {
companion object {
lateinit var userDetails: PhoenixResponse
lateinit var userSocket: UserSocket
lateinit var userChannel: UserChannel
lateinit var chatChannel: UserChannel
var isNetworkConnected: Boolean = false
}
}
А функция служебного класса похожа:
@RequiresApi(Build.VERSION_CODES.N)
fun registerDefaultNetworkCallback() {
try {
val connectivityManager =
(context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager)
connectivityManager.registerDefaultNetworkCallback(@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
object : NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
App.isNetworkConnected = true
Log.d("FLABS:", "onAvailable "+App.isNetworkConnected)
}
override fun onLost(network: Network) {
super.onLost(network)
App.isNetworkConnected = false
Log.d("FLABS:", "onLost")
}
override fun onBlockedStatusChanged(
network: Network,
blocked: Boolean
) {
super.onBlockedStatusChanged(network, blocked)
Log.d("FLABS:", "onBlockedStatusChanged")
}
override fun onCapabilitiesChanged(
network: Network,
networkCapabilities: NetworkCapabilities
) {
super.onCapabilitiesChanged(network, networkCapabilities)
Log.d("FLABS:", "onCapabilitiesChanged")
}
override fun onLinkPropertiesChanged(
network: Network,
linkProperties: LinkProperties
) {
super.onLinkPropertiesChanged(network, linkProperties)
Log.d("FLABS:", "onLinkPropertiesChanged")
}
override fun onLosing(network: Network, maxMsToLive: Int) {
super.onLosing(network, maxMsToLive)
Log.d("FLABS:", "onLosing")
}
override fun onUnavailable() {
super.onUnavailable()
Log.d("FLABS:", "onUnavailable")
}
}
)
} catch (e: Exception) {
Log.d("FLABS: Exception ", "hello")
App.isNetworkConnected = false
}
}
Он входит в OnAvailable()
метод и обновление App.isNetworkConnected
переменная. Но когда я проверяю это по своей активности, это не отражает изменений -
val network = CheckNetwork(applicationContext)
network.registerDefaultNetworkCallback()
if (App.isNetworkConnected) {
// Internet Connected
Toast.makeText(applicationContext,"You are connected!",Toast.LENGTH_LONG).show()
} else {
Toast.makeText(applicationContext,"Network is not connected!",Toast.LENGTH_LONG).show()
// Not Connected
}
Хотя у меня есть активное подключение к Интернету, это не меняет значения
App.isNetworkConnected
изfalse
кtrue
-Каждый раз он показывает ложь
Любая помощь приветствуется, в чем заключается ошибка и как правильно ее использовать.