Android互联网连接检查问题
Posted
技术标签:
【中文标题】Android互联网连接检查问题【英文标题】:Android internet connectivity check problem 【发布时间】:2011-02-14 18:06:49 【问题描述】:我是 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() 时,我的应用程序引发空指针异常。同样的事情也发生在我运行 Android 2.1 的 HTC Desire 上。
希望有人知道这个问题的解决方案。
提前致谢!
【问题讨论】:
【参考方案1】:如果崩溃直接在您的线路上:
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
那么这意味着getActiveNetworkInfo()
返回了null
,因为没有活动网络——在这种情况下,您的isConnected()
方法应该返回false
。
【讨论】:
Doh,这是我应该看到的。谢谢。 是的,如果getActiveNetworkInfo()
的文档确实存在,那将会有所帮助。 :-)
请帮助\ni已经粘贴了整个功能,但它们是getsystemservice下的红线......并且eclipse没有提供任何建议......请就如何检查互联网连接提出一些解决方案
使用 IsConnected() 代替 isConnectedOrConnecting()。 "isConnectedOrConnecting() 指示网络连接是否存在或正在建立过程中。这对于需要执行与网络相关的任何操作而不是读取或写入数据的应用程序很有用。对于后者,请调用 isConnected() 代替,这保证网络完全可用。”【参考方案2】:
我写了这个方法来处理这个:
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;
我猜有一种方法......
【讨论】:
怎么样:return (ni != null && ni.isAvailable() && ni.isConnected()); :P【参考方案3】:要检查互联网是否存在只能在设备上检查......在模拟器上它可能无法工作......我有以下代码及其在 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;
【讨论】:
【参考方案4】:使用它来确定是否连接到 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);
【讨论】:
【参考方案5】:你用过这个sn-p。
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;
【讨论】:
以上是关于Android互联网连接检查问题的主要内容,如果未能解决你的问题,请参考以下文章
Android - 检查用户连接的连接是不是有互联网连接[重复]