我正在使用下面的方法来检查天气用户是否连接到互联网。
public boolean internetIsConnected() {
try {
String command = "ping -c 1 google.com";
return (Runtime.getRuntime().exec(command).waitFor() == 0);
} catch (Exception e) {
return false;
}
}
清单如下
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
但是在我切换到最新的API 30之后。它只是冻结了应用程序并返回false。有什么建议让这个工作吗?
谢谢你。
编辑:根据评论的建议,我尝试了下面类似的方法,但仍然不工作。
public boolean internetIsConnected() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
System.out.println(" mExitValue "+exitValue);
return (exitValue == 0);
} catch (IOException e){
System.out.println(" IO Error ");
e.printStackTrace(); }
catch (InterruptedException e) {
System.out.println(" Interrupted Error ");
e.printStackTrace(); }
return false;
}
我得到了:
I/System.out: mExitValue 1
所以它是失败的尝试块本身.我试图找到什么退出值“1”的意思,但它只显示为“0”这里这发生在模拟器以及物理设备.任何建议是赞赏.
谢谢
2条答案
按热度按时间hwamh0ep1#
您可以使用以下函数
这将返回true如果互联网连接,否则它将返回false,它是非常快的,因为它不加载整个页面,而不是它只得到响应。
mnemlml82#
您可以使用以下命令检查网络可用性。
您必须在Manifest中添加
access_network_state
权限: