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