我是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也会发生同样的事情。
希望有人知道解决方案。
提前致谢!
答案 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);