我正在尝试检查是否存在互联网连接或设备是否实际连接到 wifi。
注意:我并不是要查看是否有互联网连接或是否仅连接了 wifi。我想检查设备是否真的在接收和发送数据包。
此代码 fragment 实际上检查是否存在移动数据连接或 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;
}
以上所有代码 fragment 仅检查 wifi 或数据是否已启用。它不显示连接是否已建立。如果启用了 wifi 或数据,它将始终返回 true。
再次,我的目标是检查是否已建立连接。
任何帮助都会非常有帮助..提前致谢..:)
此问题已得到解答。再次感谢。
最佳答案
感谢大家的评论和回答,但我认为这个解决方案对我有用。这实际上是尝试连接到互联网并检查状态。不确定这是否是正确的方法。
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;
}
希望这对其他观众有帮助。
关于android - 如何检查移动数据是否实际处于 Activity 状态或 wifi 是否实际连接到任何热点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23156472/