2010-05-02 205 views
16

我是Android新手,開發Android應用程序,需要通過Wifi,EDGE或3G將手機連接到互聯網。Android互聯網連接檢查問題

這是我使用來檢查網絡連接是否可用

public static boolean isConnected() 
{ 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

我也manifest文件中設置這些權限的代碼

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

這工作正常當啓用3G時,模擬器運行Android 1.5版本,但當禁用3G連接時它會崩潰。當我調用isConnectedOrConnecting()時,我的應用程序拋出一個空指針異常。運行Android 2.1的HTC Desire也發生同樣的事情。

希望任何人都知道解決方案。

提前致謝!

回答

25

如果崩潰直接在您的線路:

return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

則意味着getActiveNetworkInfo()返回null,因爲沒有活動網絡 - 在這種情況下,你的isConnected()方法應返回false

+0

Doh,這是我應該看到的。謝謝。 – Charles 2010-05-02 13:28:39

+6

是的,好吧,如果'getActiveNetworkInfo()'的文檔確實存在,它會有所幫助。 :-) – CommonsWare 2010-05-02 14:12:21

+0

請幫助\ ni粘貼了整個功能,但他們是紅線下的getsystemservice ...和日食沒有提供任何建議..請建議一些解決方案如何檢查互聯網連接 – Sourabh 2011-03-27 18:30:41

8

我寫這個方法來處理這個問題:

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo ni = cm.getActiveNetworkInfo(); 
    if (ni!=null && ni.isAvailable() && ni.isConnected()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

一個辦法做到這一點我想...

+9

怎麼樣:return(ni!= null && ni.isAvailable()&& ni。已連接()); :P – 2011-09-22 14:57:27

4

要檢查網絡是否有與否只能在設備檢查.... ..On模擬器,所以它可能無法正常工作....我有下面的代碼&其工作100%的Android設備上..... :)

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView)findViewById(R.id.txt); 
    b = checkInternetConnection(); 


    if(b!=true) 
    { 
     tv.setText("net is not dr......."); 
    } 
    else 
    { 
     tv.setText("net is dr......."); 
    } 

} 
//Check weather Internet connection is available or not 
public boolean checkInternetConnection() { 
      final ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE); 
      if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) { 
       return true; 
      } else { 
       System.out.println("Internet Connection Not Present"); 
       return false; 
      } 
     } 

}

+0

與上面相同:) – 2011-12-12 11:20:23

+0

嗨 - 爲什麼你說它可能無法在模擬器上工作? – ostergaard 2013-10-06 06:26:16

-2

使用這detemine如果connceted到WiFi/3G:

is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected(); 
    isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected(); 
    network = is3g||isWifi; 

,這使無線自己:

WifiManager wifiManager = (WifiManager) MainWindowYuval.this.getSystemService(Context.WIFI_SERVICE); 
        wifiManager.setWifiEnabled(true);  
+0

缺少一半。 – 2012-08-07 17:10:18

1

您已經使用這個片段。

ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 

     } 
+0

getAllNetworkInfo()將無法正常工作。 (在Android 2.3中) – 2015-04-13 20:45:17