【问题标题】:Stuck on Android API 29 compatible network connection卡在与 Android API 29 兼容的网络连接上
【发布时间】:2020-06-08 23:44:38
【问题描述】:

你应该在https://gist.github.com/PasanBhanu/730a32a9eeb180ec2950c172d54bb06a上查看初步讨论。

基本上,我们正在开发一个简单易用的解决方案来检查 android 应用程序的网络,它可以优雅地替换现在已弃用的 NetworkInfo 类,而不会中断旧应用程序的代码流。问题仅在于切换到 wifi 时,而不是切换到蜂窝时。

主要工作代码部分:

// Network Check
public void registerNetworkCallback()
{
    try {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkRequest.Builder builder = new NetworkRequest.Builder();

        connectivityManager.registerNetworkCallback(builder.build(),new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        Variables.isNetworkConnected = true; // Global Static Variable
                    }
                    @Override
                    public void onLost(Network network) {
                        Variables.isNetworkConnected = false; // Global Static Variable
                    }
                }

        );
        Variables.isNetworkConnected = false;
    }catch (Exception e){
        Variables.isNetworkConnected = false;
    }
}

问题是当我们切换到 wifi 时,它出于某种原因在调用 onAvailable 后调用了 onLost。因此将静态变量的值设置为 false。即使连接了网络。

这是网络切换到wifi时的调试日志:

2019-11-23 16:54:29.136 8416-8459/com.example.simplenetwork D/FLABS:: onAvailable
2019-11-23 16:54:29.136 8416-8459/com.example.simplenetwork D/FLABS:: onCapabilitiesChanged
2019-11-23 16:54:29.136 8416-8459/com.example.simplenetwork D/FLABS:: onLinkPropertiesChanged
2019-11-23 16:54:29.136 8416-8459/com.example.simplenetwork D/FLABS:: onBlockedStatusChanged
2019-11-23 16:54:29.307 8416-8459/com.example.simplenetwork D/FLABS:: onLosing

2019-11-23 16:54:29.325 8416-8459/com.example.simplenetwork D/FLABS:: onCapabilitiesChanged
2019-11-23 16:54:29.371 8416-8459/com.example.simplenetwork D/FLABS:: onLost

2019-11-23 16:54:29.959 8416-8459/com.example.simplenetwork D/FLABS:: onLinkPropertiesChanged
2019-11-23 16:54:29.975 8416-8459/com.example.simplenetwork D/FLABS:: onLinkPropertiesChanged
2019-11-23 16:54:30.972 8416-8459/com.example.simplenetwork D/FLABS:: onLinkPropertiesChanged
2019-11-23 16:54:31.693 8416-8459/com.example.simplenetwork D/FLABS:: onLinkPropertiesChanged
2019-11-23 16:54:32.053 8416-8459/com.example.simplenetwork D/FLABS:: onCapabilitiesChanged

我正在尝试在 onCapabilitiesChanged() 中添加额外的检查,但到目前为止,没有任何事情可以解决问题而不破坏其他事情。

您可以在https://gist.github.com/PasanBhanu/730a32a9eeb180ec2950c172d54bb06a查看完整代码(以及相关进度/讨论)

我的代码版本(包含完整的调试过程)作为一个干净的单独项目,仅用于测试这一点,位于 https://gist.github.com/Abhinav1217/0ff6b39e70fa38379d61e85e09b49fe7 上。

PS:有人可以为这个问题建议更好的标题,更合乎逻辑的东西吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    tldr:使用registerDefaultNetworkCallback 而不是registerNetworkCallback 以获得简单的连接解决方​​案。

    我终于开了一张 Google Android bug tracker 的票。他们解释了为什么registerNetworkCallback 会这样工作,对于简单的互联网连接,他们告诉我改用registerDefaultNetworkCallback。在原始 gist https://gist.github.com/PasanBhanu/730a32a9eeb180ec2950c172d54bb06a 上讨论了更多选项,感谢 github 和 stackoverflow 上的优秀社区。​​p>

    【讨论】:

      猜你喜欢
      • 2019-12-16
      • 2020-03-05
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2017-12-11
      • 2022-07-07
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多