通过 WiFi 连接检查互联网连接状态以发出通知

问题描述

我尝试从 WiFi 网络获取互联网状态。因此,当设备没有通过 WiFi 连接到互联网时,我可以发出通知。 因此,我现在发现使用未弃用的方法进行操作的方法是使用 mutations: { setimageData(state:any,infopackImageData: any) { state.infoPackCreationTab = { ...state.infoPackCreationTab,infopackContents: state.infoPackCreationTab.infopackContents.filter(...) }; (https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback)

我使用 ConnectinityManager.NetworkCallback

成功检查了 WiFi 何时断开或连接

当设备没有互联网数据时,我通过 .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)

成功检查

但我想要的是一个回调,通过它连接的 WiFi 检测是否有互联网。所以我试图添加上面的两个项目,但它似乎不起作用。我所做的测试是将设备连接到热点,然后禁用来自热点的数据。但它不会触发回调。

这是我使用的代码(感谢 ConnectivityManager.NetworkCallback() -> onAvailable(Network network) method is not triggered when device connects to a internal wifi network),但存在相关问题:

.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)

解决方法

要检查互联网连接,您需要在查询中包含 NET_CAPABILITY_VALIDATED

public static final int NET_CAPABILITY_VALIDATED

表示此网络连接成功 验证。例如,对于具有 NET_CAPABILITY_INTERNET 的网络,它 表示已成功检测到 Internet 连接。

因此,您可以像这样更新代码:

private fun getNetworkRequest(): NetworkRequest {
    return NetworkRequest.Builder()
            .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) // internet check works without this but need it for WiFi status
            .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
            .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
            .build()
}