2011-09-13 144 views
1

我有我的應用程序使用兩種無線網絡服務器連接(如果可用), 或GPRS(如果無線網絡不可用)。 這裏是我的代碼檢查連接可用性如何檢查網絡可用性?

public static final boolean isConnectionAvailable(Activity a) 
{ 

    ConnectivityManager cm = (ConnectivityManager)a.getSystemService(Context.CONNECTIVITY_SERVICE); 

    State mobile = cm.getNetworkInfo(0).getState(); 

    State wifi = cm.getNetworkInfo(1).getState(); 

    if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) 
    { 
     return true; 
    } 
    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) 
    { 
     return true; 
    } 

    return false; 
}  

這是一個正確的方法是什麼?任何人都可以建議我一個更好的辦法?

+1

是不是工作的東西? – Cristian

+0

這個問題也包括在http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts – tomwhipple

回答

9

下非常類似的方法工作,但一直沒有關心什麼底層介質的額外的優勢,因爲它看起來好像有針對的不僅僅是無線網絡連接更多的支持。也許這些也是由移動覆蓋,但該文檔不超清晰:

// added as an instance method to an Activity 
boolean isNetworkConnectionAvailable() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = cm.getActiveNetworkInfo();  
    if (info == null) return false; 
    State network = info.getState(); 
    return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING); 
}  
相關問題