gpt4 book ai didi

Android ConnectivityManager onAvailable 有时不返回

转载 作者:搜寻专家 更新时间:2023-11-01 09:20:48 28 4
gpt4 key购买 nike

我们使用 Android ConnectivityManager 来监听我们应用程序内部的互联网连接变化,如下所示。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
...
ConnectionStateMonitor().enable(this)
}

class ConnectionStateMonitor : NetworkCallback() {
private val networkRequest: NetworkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()

fun enable(context: Context) {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerNetworkCallback(networkRequest, this)
}

override fun onAvailable(network: Network) {
Log.i(TAG, "onAvailable ")
}

override fun onLost(network: Network?) {
super.onLost(network)
Log.i(TAG, "onLost ")
}
}
}

除了我们遇到的两个问题外,此实现运行良好

  1. 如果我们同时使用 wifi 和移动数据连接到互联网并关闭 wifi,有时会触发 onLost() 回调,然后触发 onAvailable() ,正如预期的那样,但在其他情况下, onLost() 被触发,这是不正确的。

  2. 如果我们没有互联网连接并打开应用程序,onLost() 不会被触发,但是如果我们有互联网连接并打开应用程序,onAvailable() 被解雇。

任何帮助、建议、解决方法或其他可靠检测互联网连接变化的方法都将不胜感激。

在小米 A2 (Android 9), OnePlus (Android 9) 上测试

演示项目
https://github.com/PhanVanLinh/AndroidNetworkChangeReceiver

最佳答案

我已经使用了您的项目并添加了另一个方法:onCapabilitiesChanged。我从启用飞行模式开始,然后关闭然后再次打开。这些是日志:

onAvailable 632

onCapabilitiesChanged 632 [ Transports: CELLULAR ...]

onAvailable 632

onCapabilitiesChanged 632 [ Transports: CELLULAR ...]

onAvailable 632

onCapabilitiesChanged 632 [ Transports: CELLULAR ...]

onCapabilitiesChanged 632 [ Transports: CELLULAR ...]

onCapabilitiesChanged 632 [ Transports: CELLULAR ...]

onAvailable 633

onCapabilitiesChanged 633 [ Transports: WIFI ...] onAvailable 633 onCapabilitiesChanged 633 [ Transports: WIFI ...]

onAvailable 633

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onCapabilitiesChanged 633 [ Transports: WIFI ...]

onLost 632

onLost 632

onLost 632

onLost 633

onLost 633

onLost 633

onAvailable 634

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onAvailable 634

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onAvailable 634

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onCapabilitiesChanged 634 [ Transports: CELLULAR ...]

onAvailable 635

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onAvailable 635

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onAvailable 635

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onLost 634

onLost 634

onLost 634

onCapabilitiesChanged 635 [ Transports: WIFI ...]

onCapabilitiesChanged 635 [ Transports: WIFI ...]

如您所见,LOST 用于蜂窝传输,而 AVAILABLE 用于 WiFi

根据您的用例(启用 wifi、启用移动数据、禁用 wifi 数据、启用 wifi、禁用 wifi)这就是我得到的。

onAvailable 640

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onAvailable 640

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onCapabilitiesChanged 640 [ Transports: WIFI ... ]

onLost 640

onLost 640

onAvailable 641

onCapabilitiesChanged 641 [ Transports: CELLULAR ... ]

onAvailable 641

onCapabilitiesChanged 641 [ Transports: CELLULAR ... ]

onCapabilitiesChanged 641 [ Transports: CELLULAR ... ]

onCapabilitiesChanged 641 [ Transports: CELLULAR ... ]

onAvailable 642

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onAvailable 642

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onCapabilitiesChanged 642 [ Transports: WIFI ... ]

onLost 641

onLost 641

onLost 642

onLost 642

onAvailable 643

onCapabilitiesChanged 643 [ Transports: CELLULAR ... ]

onAvailable 643

onCapabilitiesChanged 643 [ Transports: CELLULAR ... ]

onCapabilitiesChanged 643 [ Transports: CELLULAR ... ]

onCapabilitiesChanged 643 [ Transports: CELLULAR ... ]

关于Android ConnectivityManager onAvailable 有时不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823422/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com