2011-09-22 42 views
1

其实我已经使用下面的代码来检查wifi是否活动(其工作正常)。 我只是想确认我可以使用相同的代码来检查3G激活状态:如何在我的应用程序中检查3G的状态:

public boolean checkwifi() 
    { 
     ConnectivityManager connec = (ConnectivityManager) this.getSystemService(this.CONNECTIVITY_SERVICE); 
     android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     // Here if condition check for wifi and mobile network is available or not. 
     // If anyone of them is available or connected then it will return true, otherwise false; 

     if (wifi.isConnected()) { 
      return true; 
     } 
     else if (mobile.isConnected()) { 
      return true; 
     } 
     return false; 
    } 
+0

当您在手机上运行该代码时会发生什么?如果它给出正确的结果,那么你可以使用它。 –

+0

希望这有助于http://stackoverflow.com/questions/3262781/how-to-check-wifi-or-3g-network-is-available-on-android-device和这个http://stackoverflow.com/questions/2919414 /获得网络类型 – dpp

回答

0

检查您的连接(WIFI或移动)开启或关闭,请尝试以下操作:

boolean connected = false; 
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTING || 
      connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED || 
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTING) { 
     //we are connected to a network 

     connected = true; 
    } 
    else 
     connected = false; 
0

是 - 该代码应工作。我有你可能需要的功能额外位来实现:

public static boolean isOnline(Context context) { 
    //ConnectivityManager is used to check available network(s) 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    return cm.getActiveNetworkInfo() != null; 
} 

这确实与您的代码 - 它会告诉你,如果你是在网上通过任何方式(3G或WiFi),但它是一个一点更简洁。

**编辑**

下面是该方法的源 - 如果没有活动的网络连接,将返回null或将返回NetworkInfo对象的当前连接:

/** 
* Return NetworkInfo for the active (i.e., connected) network interface. 
* It is assumed that at most one network is active at a time. If more 
* than one is active, it is indeterminate which will be returned. 
* @return the info for the active network, or {@code null} if none is active 
*/ 
public NetworkInfo getActiveNetworkInfo() { 
    enforceAccessPermission(); 
    for (NetworkStateTracker t : mNetTrackers) { 
     NetworkInfo info = t.getNetworkInfo(); 
     if (info.isConnected()) { 
      return info; 
     } 
    } 
    return null; 
} 
+0

“通过任何方法”,因此它包括GPRS(2.5G)和EDGE(2.75G)。我错了吗? –

+0

查看修改后的答案 - 是的,这适用于任何连接类型。 – Martyn

相关问题