我正在尝试检查是否存在互联网连接或设备是否实际连接到wifi。
注意:我不是想看看是否有互联网连接,或者只是连接了wifi。我想检查设备是否实际接收和发送数据包。
此代码段实际上会检查是否存在移动数据连接,或者是否启用了wifi,但是没有说明连接是否已实际建立。
public boolean isNetworkConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
// There are no active networks.
Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show();
return false;
} else
return true;
或
boolean isConnected = ni != null && ni.isConnectedOrConnecting();
if(isConnected){
return true;
}
else{
Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show();
return false;
}
}
或
public boolean haveNetworkConnection(Context context) {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
以上所有代码段仅检查是否启用了wifi或数据。它不显示连接是否已建立。如果启用了wifi或数据,它将始终返回true。
再次,我的目标是检查是否检查连接是否已建立。
任何帮助都会非常有用..请提前感谢.. :)
此问题已得到解答。再次感谢。
答案 0 :(得分:5)
感谢您的评论和回答,但我认为这个解决方案对我有用。这实际上是尝试连接到互联网并检查状态。不确定这是否是正确的方法。
public Boolean isOnline() {
try {
Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
if(reachable){
System.out.println("Internet access");
return reachable;
}
else{
System.out.println("No Internet access");
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
希望这有助于其他观众。
答案 1 :(得分:0)
您必须ping互联网上的服务器(即谷歌),看看您是否真正连接过。