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

问题描述 投票:3回答:1

你应该检查最初的讨论 https:/gist.github.comPasanBhanu730a32a9eeb180ec2950c172d54bb06a。 上。

基本上,我们正在研究一个简单的解决方案,用于检查安卓应用程序的网络,它可以优雅地取代现在已经废弃的 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.comPasanBhanu730a32a9eeb180ec2950c172d54bb06a。

我的代码版本(包含完整的调试过程)作为一个干净的独立项目,只是为了测试这个项目,是关于 https:/gist.github.comAbhinav12170ff6b39e70fa38379d61e85e09b49fe7。 .

PS:谁能给这个问题提出更好的标题,更合理的标题?

android
1个回答
0
投票

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

我终于向Google Android bug tracker开了一个票。他们解释了为什么 registerNetworkCallback 这样,对于简单的互联网连接的东西,他们告诉我,使用 registerDefaultNetworkCallback 而不是。原文要旨上还讨论了几种方案。 https:/gist.github.comPasanBhanu730a32a9eeb180ec2950c172d54bb06a。 感谢github和stackoverflow的精彩社区。

© www.soinside.com 2019 - 2024. All rights reserved.