2015-04-08 63 views
0

目前我正在尋找一個具體的解決方案來獲得蜂窩網絡的可用性。爲此,我想分享一個場景: 假設我正在獲取蜂窩連接,但數據連接在這種情況下被禁用,它應該給我帶來積極的結果,但我不在覆蓋區域或飛行模式爲ON它應該返回false。我已經嘗試了幾個代碼從計算器:像Check Network connections in androidCheck mobile network connectivity & What does NetworkInfo.State SUSPENDED indicate? 但仍然不是我正在尋找。 幾個我試過其他的代碼是:如何在android中檢查蜂窩網絡連接

public String getCellularState(Context context){ 

      if(mPhoneState!=null && mPhoneState.getState()==ServiceState.STATE_IN_SERVICE){ 
      return "Available"; 
     } 
     else{ 
      return "Not Available"; 
     } 
} 

public String getOperator() 
    { 
     TelephonyManager manager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
      opeartorName = manager.getSimOperator(); 
      return opeartorName; 
    } 

但沒有得到成功,請您推薦合適的方式,也沒有這個涉及到數據連接

回答

0

請查看此方法(如果連接到網絡,則返回true):

public static boolean checkConnectivity(Context ctx) { 
     boolean bConectado = false; 
     ConnectivityManager connec = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] redes = connec.getAllNetworkInfo(); 

     for (int i = 0; i < 2; i++) { 
      if (redes[i].getState() == NetworkInfo.State.CONNECTED) { 
       bConectado = true; 
      } 
     } 
     return bConectado; 
    } 

我認爲它來自Stack Overflow的其他帖子,但我不記得鏈接。

要查看,如果你有一個真正的連接,您可以檢查它通過一個ping到谷歌DNS例如(How to Ping External IP from Java Android):

public static boolean executeCammand(){ 
     System.out.println(" executeCammand"); 
     Runtime runtime = Runtime.getRuntime(); 
     try 
     { 
      Process mIpAddrProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
      int mExitValue = mIpAddrProcess.waitFor(); 
      System.out.println(" mExitValue "+mExitValue); 
      if(mExitValue==0){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 
     catch (InterruptedException ignore) 
     { 
      ignore.printStackTrace(); 
      System.out.println(" Exception:"+ignore); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
      System.out.println(" Exception:"+e); 
     } 
     return false; 
    } 

但在我看來,這是不是最好的選擇。

0

請檢查以下內容並修改按規定:

public boolean getNetworkState() { 
    boolean network = false; 
    boolean data = false; 
    ConnectivityManager connectivity = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] infos = connectivity.getAllNetworkInfo(); 
    for (int i = 0; i < infos.length; i++) { 
     if(infos[i].isAvailable()){ 
      network = true; 
     } 
     if(infos[i].isConnected()){ 
      data = true; 
     } 
    } 

    if(network) 
     if(!data) 
      return true; 

    return false; 
} 

如果網絡中存在一個與數據連接不活動的,那麼它將返回true,否則爲false。 isAvailable將返回網絡可用性,並且isConnected將返回數據一致性。

0
/** 
* Checking whether internet connection is available or not using wifi as well as mobile data network. 
* 
* @param nContext 
* @return true if net connection is avaible otherwise false 
*/ 
public static boolean isNetworkAvailable(Context nContext) { 
    boolean isNetAvailable = false; 
    if (nContext != null) { 
     ConnectivityManager mConnectivityManager = (ConnectivityManager) nContext 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (mConnectivityManager != null) { 
      boolean mobileNetwork = false; 
      boolean wifiNetwork = false; 
      boolean mobileNetworkConnecetd = false; 
      boolean wifiNetworkConnecetd = false; 
      NetworkInfo mobileInfo = mConnectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
      NetworkInfo wifiInfo = mConnectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
      if (mobileInfo != null) 
       mobileNetwork = mobileInfo.isAvailable(); 
      if (wifiInfo != null) 
       wifiNetwork = wifiInfo.isAvailable(); 
      if (wifiNetwork == true || mobileNetwork == true) { 
       if (mobileInfo != null) 
        mobileNetworkConnecetd = mobileInfo 
          .isConnectedOrConnecting(); 
       wifiNetworkConnecetd = wifiInfo.isConnectedOrConnecting(); 
      } 
      isNetAvailable = (mobileNetworkConnecetd || wifiNetworkConnecetd); 
     } 
    } 
    return isNetAvailable; 

} 
+0

只是一個旁註:考慮不能忽視周圍的花括號if語句,甚至簡單的。讀者必須弄清楚你的代碼是否適當地被滿足。 – sschrass

+0

@SatelliteSD:你能指導我關於你的筆記嗎?我的意思是說行號... – Utsav

0

試試這個

public class ConnectionDetector { 
    private static Context _context; 

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

    public static boolean isConnectingToInternet(){ boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile;}//here is change to take which we want 

} 
add these permissions in manifest file 

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