首页 > 解决方案 > 检查 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。

标签: androidandroid-networking

解决方案


推荐阅读