Java 检查internet连接问题

Java 检查internet连接问题,java,android,Java,Android,我正在使用此功能检查手机是否连接到互联网。但有时即使断开连接,也会显示已连接。有人能看一下,告诉我我做错了什么吗?提前谢谢 这些是我正在使用的函数 public String ConnectionQuality(Context context) { NetworkInfo info = getInfo(context); if (info == null || !info.isConnected()) { return "UNKNOWN"; }

我正在使用此功能检查手机是否连接到互联网。但有时即使断开连接,也会显示已连接。有人能看一下,告诉我我做错了什么吗?提前谢谢

这些是我正在使用的函数

public String ConnectionQuality(Context context) {
    NetworkInfo info = getInfo(context);
    if (info == null || !info.isConnected()) {
        return "UNKNOWN";
    }

    if(info.getType() == ConnectivityManager.TYPE_WIFI) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        int numberOfLevels = 5;
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), numberOfLevels);
        if(level == 2 )
            return "POOR";
        else if(level == 3 )
            return "MODERATE";
        else if(level == 4 )
            return "GOOD";
        else if(level == 5 )
            return "EXCELLENT";
        else
            return "UNKNOWN";
    }else if(info.getType() == ConnectivityManager.TYPE_MOBILE) {
        int networkClass = getNetworkClass(getNetworkType(context));
        if(networkClass == 1)
            return "POOR";
        else if(networkClass == 2 )
            return "GOOD";
        else if(networkClass == 3 )
            return "EXCELLENT";
        else
            return "UNKNOWN";
    }else
        return "UNKNOWN";
}



public NetworkInfo getInfo(Context context) {
    return ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
}



public int getNetworkClass(int networkType) {
    try {
        return getNetworkClassReflect(networkType);
    }catch (Exception ignored) {
    }

    switch (networkType) {
        case TelephonyManager.NETWORK_TYPE_GPRS:
        case 16: // TelephonyManager.NETWORK_TYPE_GSM:
        case TelephonyManager.NETWORK_TYPE_EDGE:
        case TelephonyManager.NETWORK_TYPE_CDMA:
        case TelephonyManager.NETWORK_TYPE_1xRTT:
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return 1;
        case TelephonyManager.NETWORK_TYPE_UMTS:
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
        case TelephonyManager.NETWORK_TYPE_HSDPA:
        case TelephonyManager.NETWORK_TYPE_HSUPA:
        case TelephonyManager.NETWORK_TYPE_HSPA:
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
        case TelephonyManager.NETWORK_TYPE_EHRPD:
        case TelephonyManager.NETWORK_TYPE_HSPAP:
        case 17: // TelephonyManager.NETWORK_TYPE_TD_SCDMA:
            return 2;
        case TelephonyManager.NETWORK_TYPE_LTE:
        case 18: // TelephonyManager.NETWORK_TYPE_IWLAN:
            return 3;
        default:
            return 0;
    }
}

private int getNetworkClassReflect(int networkType) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Method getNetworkClass = TelephonyManager.class.getDeclaredMethod("getNetworkClass", int.class);
    if (!getNetworkClass.isAccessible()) {
        getNetworkClass.setAccessible(true);
    }
    return (Integer) getNetworkClass.invoke(null, networkType);
}

public static int getNetworkType(Context context) {
    return ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkType();
}

这个代码怎么了?有没有更好的方法在所有android版本中实现相同的功能?

我想你只是检查信号质量,而不是互联网连接,以检查手机是否连接到互联网或不使用此功能

 public boolean isOnline(Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    //should check null because in airplane mode it will be null
    return (netInfo != null && netInfo.isConnected());

}