卡在 Android API 29 兼容的网络连接上

Abh*_*tha 6 android

您应该查看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;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我们切换到 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Abh*_*tha 5

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

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