Android互联网连接检查问题

时间:2010-05-02 12:14:16

标签: android android-permissions android-internet

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

这是我用来检查互联网连接是否可用的代码

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 个答案:

答案 0 :(得分:25)

如果您的线路上的直接崩溃:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

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

答案 1 :(得分: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; 
    }
}

一种方法,我猜...

答案 2 :(得分:4)

检查互联网是否存在只能在设备上检查......在模拟器上它可能无法工作....我有以下代码&amp;它在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;
           }
        }

}

答案 3 :(得分: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;
                  }

      }

答案 4 :(得分:-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);      
相关问题