android - 检查 VPN 上的 Internet 连接
问题描述
我在下面添加了用于检查设备上的 Internet 连接的代码。
fun isConnected(): Boolean {
val network = connectivityManager.activeNetwork
val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
return (
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
)
}
在此之前,我使用connectivityManager.activeNetworkInfo
的是现在已弃用的。那时没有人抱怨。这是isConnected()
Java中的方法。
public boolean isConnected() {
NetworkInfo networkInfo = (connectivityManager != null) ? connectivityManager.getActiveNetworkInfo() : null;
return ((networkInfo != null) && networkInfo.isAvailable() && networkInfo.isConnected());
}
我收到一些 VPN 用户的投诉,即即使 Internet 在浏览器中运行良好,该应用程序仍显示未连接到 Internet。
我在代码中添加了详细的日志以查看发生了什么。
val activeNetwork = connectivityManager.activeNetwork
val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork)
Logger.v(LOG_TAG, LogCategory.OTHER, "getNetworkCapabilities(): $networkCapabilities")
Logger.v(
LOG_TAG, LogCategory.OTHER,
"getActiveNetworkInfo(): ${connectivityManager.activeNetworkInfo}"
)
以下是来自用户设备的日志:
getNetworkCapabilities(): [ Transports: VPN Capabilities: NOT_RESTRICTED&TRUSTED&VALIDATED&FOREGROUND]
getActiveNetworkInfo(): [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "Jordan", failover: false, available: true, roaming: false, metered: false]
当我连接到 VPN 时来自我的设备的日志:
getNetworkCapabilities(): [ Transports: WIFI|VPN Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps]
getActiveNetworkInfo(): [type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), failover: false, available: true, roaming: false]
我了解问题是因为networkCapabilities
在他们的设备上没有,NET_CAPABILITY_INTERNET
但为什么会有差异?为什么activeNetworkInfo
在两个设备上都一样?即使networkCapabilities
在他们的设备上传输 VPN,而我的设备同时传输 VPN 和 Wifi。
解决方案
推荐阅读
- reset - 如何调整每个标签页的脚本以重置整个页面并仅重置公式和 Dropbox?
- c# - C# 从对象中获取属性值
- snowflake-cloud-data-platform - 爱因斯坦连接到雪花 - JDBC 错误
- excel - 使用新名称保存后 Excel 无法找到文件
- azure - Can't run my build release task on azure release pipeline error 异常:初始化名为“MSTest”的设置提供程序时出错
- r - 如何增加 facet_wrap 中每个图的大小?
- xslt - 基于新值分组
- c# - c# 序列化对象抛出 System.MissingMethodException
- apache-kafka - Kafka集群配置检查
- r - mlr3 rpart 学习器中未定义变量重要性