Internet check over android.net.NetworkCapabilities not working

别说谁变了你拦得住时间么 提交于 2020-04-29 09:28:47

问题


I have a question about android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET. According to the JavaDocs this "indicates that this network should be able to reach the internet".

Unfortunately this seems not to work properly - or I do something wrong here. I outputed the value of capabilities for three different Wi-Fi networks:

  1. A Wi-Fi with internet access.

  2. A Wi-Fi without internet access (I manually disabled the internet here).

  3. A public hotspot (the "Telekom" hotspot)

In all three cases the capabilities value is [ Transports: WIFI Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN LinkUpBandwidth>=1048576Kbps LinkDnBandwidth>=1048576Kbps].

This is my code:

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
boolean capability = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET

The boolean value is always true when connected with some Wi-Fi.

If it is relevant, the device I've tested is running under Android 5.0.1 (API 21). I compiled the app to API level 23.


回答1:


For devices with API 23+ you can check flag NET_CAPABILITY_VALIDATED

@RequiresApi(api = Build.VERSION_CODES.M)
private static boolean hasInternetConnectionM(final Context context) {
    final ConnectivityManager connectivityManager = (ConnectivityManager)context.
            getSystemService(Context.CONNECTIVITY_SERVICE);

    final Network network = connectivityManager.getActiveNetwork();
    final NetworkCapabilities capabilities = connectivityManager
            .getNetworkCapabilities(network);

    return capabilities != null
            && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
}

I check it on different devices and it works right. Except Xiaomi Redmi 3S MIUI 8 - it returns NET_CAPABILITY_VALIDATED for Wi-Fi without internet access.

For API < 23 I use ping.



来源:https://stackoverflow.com/questions/36358531/internet-check-over-android-net-networkcapabilities-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!