2010-05-02 198 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