2012-11-03 31 views
0

我發現了一些有趣的android操作系統,我想在我自己的應用程序中使用,但如何?如何使用整數來顯示狀態

就像在ConnectivityManager http://developer.android.com/reference/android/net/ConnectivityManager.html,你看像

public static int TYPE_WIFI = 1; 

狀態碼當你調用與此代碼連接性管理:

ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Connectivity_Service); 
NetworkInfo iswifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
if (iswifi.isConnected()){ msg = "You got WIFI!"} 

,但如果我有需要的一類說如果我有互聯網連接,我怎麼能讓它返回這樣的狀態代碼?

已經感謝您的回答:)

Wout的

回答

0

這裏簡單的版本:

/*@return boolean return true if the application can access the internet*/ 
public static boolean haveInternet(Context context){ 
    NetworkInfo info = ((ConnectivityManager)context.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 true; 
    } 
    return true; 
} 

在這裏,你有WiFi的喜好擁有它,你可以,如果你想要一些行動,通過設置爲只用wifi偏好的限制規定。例如,您可以使用withRoamingPref = false檢查小型下載;任何互聯網連接返回true。 然後使用withRoamingPref = true檢查是否有大量下載,在這種情況下,它將檢查用戶是否啓用了「only wifi」來下載它們,如果使用wifi則返回true,如果用戶允許移動連接下載它們,則返回true;如果沒有互聯網連接或者您正在使用移動連接並且用戶已禁用它以下載大量文件,則爲false。

public static boolean haveInternet(Context context, boolean withRoamingPref){ 
    NetworkInfo info = ((ConnectivityManager)context.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 
     if(withRoamingPref) { 
      SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
      boolean onlyWifi = settings.getBoolean("onlyWifi", false); 

      if (onlyWifi) { 
       return false; 

      }else{ 
       return true; 
      } 

     }else{ 
      return true; 
     } 
    } 
    return true; 
} 

修改的情況下返回所有三種狀態,並決定如何在另一塊的應用程序的行爲:

/*@return int return 0 if the application can't access the internet 
    return 1 if on mobile data or 2 if using wifi connection*/ 
public static int haveInternet(Context context){ 
    NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
    if (info==null || !info.isConnected()) { 
     return 0; 
    } 
    if (info.isRoaming()) { 
     return 1; 
    }else{ 
     return 2; 
    } 
} 

PS:不是數字的,你應該用靜態分配每個州int然後返回,而不是原始的int。例如,在課程開始時聲明:

public static int INTERNET_DISABLED = 0;

然後而不是「返回0;」你將使用「return INTERNET_DISABLED;」

這樣你就不必記住意味着每個號碼,您將在對名稱的應用程序的其他部分檢查如:

if(myClass.haveInternet == myClass.INTERNET_DISABLED){ 
    //TODO show no internet message 
} 
+0

在我的應用程序我需要知道用戶是通過移動數據連接的,因爲我可以讓他只下載小的東西,並將大文件限制爲僅用於WiFi。當沒有連接可用時給出錯誤 – WHDeveloper

+0

漫遊意味着手機通過移動數據連接,所以您已經覆蓋了,第二個snipet代碼是我用於此目的的,我將重新解釋說明。但您可以將布爾值更改爲int,並且返回0表示無連接,1表示移動數據,2表示無線連接。 – Aerinx

+0

也檢查我最後的編輯,我認爲這就是你要找的,我回答時忽略了你的問題的標題,如果你需要更多的幫助,如何管理和使用靜態詮釋變量,請離開。 – Aerinx

0

創建網絡檢查類爲:

public class NetWorkCheck{ 
    ConnectivityManager connectivityManager; 
    NetworkInfo iswifi,mobileInfo; 

    public String checkNow(Context con){ 

     try{ 
      connectivityManager = (ConnectivityManager) 
          con.getSystemService(Context.CONNECTIVITY_SERVICE); 
      iswifi = connectivityManager.getNetworkInfo(
              ConnectivityManager.TYPE_WIFI); 
      mobileInfo = connectivityManager.getNetworkInfo(
             ConnectivityManager.TYPE_MOBILE); 
     if(wifiInfo.isConnected()) 
      return "You got WIFI!"; 
     else { 
       if(mobileInfo.isConnected()){ 
       return "You got TYPE_MOBILE!"; 
       } 
       { 
       return "WIFI or TYPE_MOBILE Connectivity Problem!"; 
       } 
      } 
     } 
     catch(Exception e){ 
      return "CheckConnectivity Exception"; 
     } 
    } 
} 

活動,就可以使用這個類來檢查無線網絡連接爲:

NetWorkCheck ntw = new NetWorkCheck(); 
String meg_wifi = ntw.checkNow(getApplicationContext()); 
+0

我想要的應用程序返回一個狀態時,它是所以,當我這樣做:ntw.checkNow(TYPE_WIFI);它返回我,如果我有WiFi或沒有,但與MOBILE_DATA和NO_CONNECTIVITY – WHDeveloper

+0

相同請參閱我的編輯ansewer –

+0

但是,這對ConnectivityManager類中的其他連接事件是如何工作的? http://whdeveloper.host22.com/stackoverflow。HTML這是我在這個時候的代碼,但我需要使它工作。所以我想要一個檢查「getconnection();」並返回連接狀態int – WHDeveloper

相關問題