你应该检查最初的讨论 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:谁能给这个问题提出更好的标题,更合理的标题?
tldr: 使用 registerDefaultNetworkCallback
而不是 registerNetworkCallback
的简单连接解决方案。
我终于向Google Android bug tracker开了一个票。他们解释了为什么 registerNetworkCallback
这样,对于简单的互联网连接的东西,他们告诉我,使用 registerDefaultNetworkCallback
而不是。原文要旨上还讨论了几种方案。 https:/gist.github.comPasanBhanu730a32a9eeb180ec2950c172d54bb06a。 感谢github和stackoverflow的精彩社区。