即使连接到wifi或3G,也请检查互联网连接

时间:2015-12-17 23:38:24

标签: android android-wifi internet-connection

即使手机连接到wifi网络或3G,我也需要检查是否有互联网连接。我有这个代码,但只有连接到网络时才会说:

public class ConnectionDetector {

    private Context _context;

    public ConnectionDetector(Context context){
        this._context = context;
    }

    public boolean isConnectingToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null) 
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null) 
                  for (int i = 0; i < info.length; i++) 
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }

          }
          return false;
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法检测3G或WiFi是否已连接

Options +FollowSymLinks -Multiviews

<IfModule mod_rewrite.c>

SetEnv HTTP_MOD_REWRITE On
RewriteEngine on
RewriteRule ^test/([0-9]+)/?$ test.php?id=$1 [NC,L]    
</IfModule>

答案 1 :(得分:0)

我创建了这个类来获取用户是否在互联网上连接以及他有什么类型的连接

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

public class NetWork {

    private static boolean connectionEstablished = false;

    /**
     * get the internet connection of the device
     *
     * @param context
     * @return the type of internet connection
     */
    private static NetWorkTypes getNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();

        if (info == null || !info.isConnected())
            return NetWorkTypes.NO_CONNECTION;

        if (info.getType() == ConnectivityManager.TYPE_WIFI)
            return NetWorkTypes.WIFI;

        if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
            int networkType = info.getSubtype();
            switch (networkType) {
                case TelephonyManager.NETWORK_TYPE_GPRS:
                case TelephonyManager.NETWORK_TYPE_EDGE:
                case TelephonyManager.NETWORK_TYPE_CDMA:
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN: // all above for 2G

                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: // all above for 3G

                case TelephonyManager.NETWORK_TYPE_LTE:   // 4G
                    return NetWorkTypes.MOBILE_NETWORK;
                default:
                    return NetWorkTypes.UNKNOWN;
            }
        }
        return NetWorkTypes.UNKNOWN;
    }

    /**
     * check if device is connected on the internet
     *
     * @param context
     * @return true if is connected, false if isn't
     */
    public static boolean isConnected(Context context) {
        NetWorkTypes netWorkType;
        netWorkType = getNetwork(context);
        if (netWorkType == NetWorkTypes.WIFI || netWorkType == NetWorkTypes.MOBILE_NETWORK) {
            connectionEstablished = true;
        } else {
            connectionEstablished = false;
        }
        return connectionEstablished;
    }

    /**
     * @return the boolean that tells if there is connection on the internet
     */
    public static boolean getConnectionEstablished() {
        return connectionEstablished;
    }
}

NetWorkTypes只是一个枚举。你可以返回任何你想要的东西

答案 2 :(得分:0)

你说检查*互联网*连接,即使连接到wifi或3G ,但你的实现实际上不会测试这个,因为简单地连接到WiFi网络并不意味着你有互联网连接。作为建议,您可以尝试打开已知主机的套接字 - 如果连接成功,您可以确定您具有网络访问权限。

function doSomething(a) {
    function doSomethingElse(a) {
        return a - 1;
    }

    var b;

    b = a + doSomethingElse( a * 2 );

    console.log( (b * 3) );
}

doSomething( 2 ); // 15