Android互联网连接检查问题

我是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()时,我的应用程序抛出一个空指针exception。 运行Android 2.1的HTC Desire也发生同样的事情。

希望有人知道这个解决scheme。

提前致谢!

如果崩溃直接在你的线上:

 return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

那么这意味着getActiveNetworkInfo()返回null ,因为没有活动的networking – 在这种情况下,你的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; } } 

一种方法,我猜…

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