2010-07-16 136 views
31

在這裏,我的Android設備同時支持WiFi和3G。在特定時間哪個網絡可用於此設備。因爲我的要求是3g可用時,我必須上傳少量的數據。當wifi可用時,整個數據必須上傳。所以,我必須檢查連接是WiFi還是3G。請幫幫我。提前致謝。如何檢查WiFi或3G網絡可在Android設備上

+0

@govardhan:+1我也有這個問題。你有沒有得到任何答案? – Praveen 2010-07-24 12:13:11

+1

看看那個http://stackoverflow.com/questions/2789612/how-can-i-check-whether-an-android-device-is-connected-to-the-web http://stackoverflow.com/questions/3119607/how-to-be-informed-on-wifi-network-status-change http://stackoverflow.com/questions/3211978/how-to-check-internet-connectivity-in-android http:/ /stackoverflow.com/questions/2919414/get-network-type http://stackoverflow.com/search?q = ConnectivityManager – Fedor 2010-07-16 07:34:42

+0

此鏈接中包含您需要的代碼http://stackoverflow.com/a/9256972/191246。 – ccpizza 2012-07-14 20:58:24

回答

54

我用這個:

/** 
* Checks if we have a valid Internet Connection on the device. 
* @param ctx 
* @return True if device has internet 
* 
* Code from: http://www.androidsnippets.org/snippets/131/ 
*/ 
public static boolean haveInternet(Context ctx) { 

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 

    if (info == null || !info.isConnected()) { 
     return false; 
    } 
    if (info.isRoaming()) { 
     // here is the roaming option you can change it if you want to 
     // disable internet while roaming, just return false 
     return false; 
    } 
    return true; 
} 

您還需要

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
在AndroidMainfest.xml

爲了讓您可以使用此代碼段的網絡類型:

ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

//mobile 
State mobile = conMan.getNetworkInfo(0).getState(); 

//wifi 
State wifi = conMan.getNetworkInfo(1).getState(); 

然後用它這樣的:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) { 
    //mobile 
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { 
    //wifi 
} 

爲了得到我會嘗試移動網絡的類型TelephonyManager#getNetworkTypeNetworkInfo#getSubtypeName

+0

當我在沒有SIM卡的平板電腦上使用此代碼時,此代碼給我錯誤。 – 2013-11-11 05:17:18

1

您需要添加以下權限的Android清單文件:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

之後,你可以使用下面的功能來檢查wifi或移動網絡是否連接

public static boolean isWifiConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

public static boolean isMobileConnected(Context context) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     return ((netInfo != null) && netInfo.isConnected()); 
    } 

從developer.android.com一些參考文獻:

  1. https://developer.android.com/reference/android/net/ConnectivityManager.html
  2. https://developer.android.com/reference/android/net/NetworkInfo.html
  3. https://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()
0

首先獲取到ConnectivityManager的引用,然後check the Wifi and 3G status的設備。 您需要ACCESS_NETWORK_STATE權限才能使用此服務。

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (mWifi.isAvailable() == true) { 
     return "Connected to WiFi"; 
    } else if (mMobile.isAvailable() == true) { 
     return "Connected to Mobile Network"; 
    } else return "No internet Connection" 
0

您可以使用此方法來檢查您的網絡連接是否2G,3G或4G

public String getNetworkClass(Context context) { 
    TelephonyManager mTelephonyManager = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
    int networkType = mTelephonyManager.getNetworkType(); 
    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: 
      return "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: 
      return "3G"; 
     case TelephonyManager.NETWORK_TYPE_LTE: 
      return "4G"; 
     default: 
      return "Unknown"; 
    } 
} 

並採用下面的方法,你可以檢查是否網絡是否可用,並通過移動網絡或WiFi訪問互聯網

public String getNetworkType(Context context){ 
    String networkType = null; 
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
       networkType = "WiFi"; 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      networkType = "Mobile"; 
     } 
    } else { 
     // not connected to the internet 
    } 
    return networkType; 
} 
相關問題