安卓网络连接检测问题

16

我是Android开发的新手,正在开发一个需要手机通过Wifi、EDGE或3G连接到互联网的Android应用程序。

这是我用来检查是否有可用网络连接的代码:

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

我也在清单文件中设置了这些权限

<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上也发生了同样的事情。

希望有人知道解决方法。

提前感谢!

5个回答

24

如果崩溃直接发生在你的代码行上:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

那么这意味着getActiveNetworkInfo()返回了null,因为没有活跃的网络 - 在这种情况下,您的isConnected()方法应该返回false


哦,这是我应该看到的东西。谢谢。 - Charles
6
是的,如果getActiveNetworkInfo()的文档实际存在会有所帮助。 :-) - CommonsWare
请帮忙,我已经粘贴了整个函数,但在getsystemservice...下面有一条红线,而且Eclipse没有提供任何建议。请建议一些解决方法来检查互联网连接。 - Sourabh
请使用IsConnected()代替isConnectedOrConnecting()。 "isConnectedOrConnecting()表示网络连接是否存在或正在建立过程中。这对于需要执行与网络相关的任何操作(读取或写入数据以外)的应用程序非常有用。对于后者,请调用isConnected(),它保证网络完全可用。" - Yousha Aleayoub

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.isConnected()); :P - Marek Stój

4

只能在设备上检查互联网是否可用......在模拟器上可能无法工作。我有以下代码,它在Android设备上100%工作..... :)

@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;
           }
        }

}


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;
                  }

      }

-2

使用此方法来确定是否连接到WiFi/3G:

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

并且这样可以自己启用wifi:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接