我是Android开发的新手,并在Android应用程序上工作,该应用程序需要通过WiFi,Edge或3G连接手机与Internet连接。

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

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()时,我的应用程序会引发空指针异常。我的HTC Desire运行Android 2.1也发生了同样的事情。

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

提前致谢!

有帮助吗?

解决方案

如果坠机是 直接地 在您的行:

return cm.getActiveNetworkInfo().isConnectedOrConnecting();

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

其他提示

我写了此方法来处理这一点:

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

我猜想的一种方法...

要检查Internet在那里是否只能在设备上检查或不检查互联网……在模拟器上可能无法正常工作。...我有以下代码及其在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;
           }
        }

}

您已经使用了这个片段。

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

      }

如果将其连接到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);      
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top