首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android ConnectivityManager onAvailable有时没有返回

Android ConnectivityManager onAvailable有时没有返回
EN

Stack Overflow用户
提问于 2019-04-24 06:10:40
回答 4查看 3.3K关注 0票数 7

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

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

发布于 2019-05-06 20:43:24

我使用了您的项目,并添加了另一个方法:onCapabilitiesChanged。我以电子邮件的方式开始飞行,然后关掉,然后又重新打开。这些是日志:

onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onAvailable 632 onCapabilitiesChanged 632传输:蜂窝. onCapabilitiesChanged 632传输:蜂窝. onCapabilitiesChanged 632传输:蜂窝. onAvailable 633 onCapabilitiesChanged 633传输: WIFIonAvailable 633 onCapabilitiesChanged 633传输: WIFI onAvailable 633 onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onCapabilitiesChanged 633传输: WIFI onLost 632 onLost 632 onLost 632 onLost 633 onLost 633 onLost 633 onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onAvailable 634 onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onCapabilitiesChanged 634传输:蜂窝. onAvailable 635 onCapabilitiesChanged 635传输: WIFI onAvailable 635 onCapabilitiesChanged 635传输: WIFI onAvailable 635 onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI onLost 634 onLost 634 onLost 634 onCapabilitiesChanged 635传输: WIFI onCapabilitiesChanged 635传输: WIFI

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

按照您的用例(启用wifi,启用移动数据,禁用wifi数据,启用wifi,禁用wifi) --这就是我得到的。

onAvailable 640 onCapabilitiesChanged 640传输:无线. onAvailable 640 onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onCapabilitiesChanged 640传输:无线. onLost 640 onLost 640 onAvailable 641 onCapabilitiesChanged 641传输:蜂窝. onAvailable 641 onCapabilitiesChanged 641传输:蜂窝. onCapabilitiesChanged 641传输:蜂窝. onCapabilitiesChanged 641传输:蜂窝. onAvailable 642 onCapabilitiesChanged 642传输: WIFI onAvailable 642 onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onCapabilitiesChanged 642传输: WIFI onLost 641 onLost 641 onLost 642 onLost 642 onAvailable 643 onCapabilitiesChanged 643传输:蜂窝. onAvailable 643 onCapabilitiesChanged 643传输:蜂窝. onCapabilitiesChanged 643传输:蜂窝. onCapabilitiesChanged 643传输:蜂窝.

票数 3
EN

Stack Overflow用户

发布于 2019-04-30 08:52:21

AndroidManifest上广播接收机的定义发生了一些变化。您可以在这里上找到适当的描述。

您已经以这种方式实现了,但是无论如何,我希望添加网络回调类引用作为参考点。

票数 1
EN

Stack Overflow用户

发布于 2020-06-28 09:33:58

也许您可以尝试使用requestNetwork而不是registerNetworkCallback

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55823422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档