检查Internet连接,Android Studio on API 30

57hvy0tb  于 2023-03-24  发布在  Android
关注(0)|答案(2)|浏览(140)

我正在使用下面的方法来检查天气用户是否连接到互联网。

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”这里这发生在模拟器以及物理设备.任何建议是赞赏.
谢谢

hwamh0ep

hwamh0ep1#

您可以使用以下函数

private static final String CMD_PING_GOOGLE = "ping -c 1 google.com";

public static boolean checkInternetPingGoogle(){
    try {
        int a = Runtime.getRuntime().exec(CMD_PING_GOOGLE).waitFor();
        return a == 0x0;
    } catch (IOException | InterruptedException ioE){
        Log.e("exception", ioE.toString());
    }
    return false;
}

这将返回true如果互联网连接,否则它将返回false,它是非常快的,因为它不加载整个页面,而不是它只得到响应。

mnemlml8

mnemlml82#

您可以使用以下命令检查网络可用性。

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

您必须在Manifest中添加access_network_state权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

相关问题