使用ping验证互联网连接仅在Android 4.3 Jellybean中失败



我使用了一个函数,通过发送ping来成功检测Android 4.1到6.0应用程序中的互联网连接。(因为,请记住,连接到WiFi或移动网络本身并不能保证该设备能够真正访问互联网。)我的问题是,我发现由于某种原因,我的代码无法在Android 4.3中工作。你知道怎么解决这个问题吗?或者,你知道一种更好的方法来检测Android 4.1-6.0版本中所有设备的互联网连接吗?

    //this function works perfectly!! except in Android 4.3 Jellybean
    public boolean isOnline() {
            Runtime runtime = Runtime.getRuntime();
            try {
                Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
                int     exitValue = ipProcess.waitFor();
                if(exitValue==0)
                    app.logy("PING @K - ONLINE!!");
                return (exitValue == 0);
            } catch (IOException e){
                e.printStackTrace();
                app.logy("PING ERROR - OFFLINE");
                return false;
                }
            catch (InterruptedException e){
                e.printStackTrace();
                app.logy("PING ERROR - OFFLINE");
                return false;
            }
        }

http://clients3.google.com/generate_204用于检查连接,ping在不同设备中的工作方式不同。

为什么ping在某些设备上有效,而在其他设备上无效?

private int inter = 0;   


            class checkconne extends AsyncTask<String, String, String> {
                        @Override
                        protected void onPreExecute() {
                            super.onPreExecute();

                        }
                        @Override
                        protected String doInBackground(String... args) {
                            int kk=0;
                            try {
                                HttpURLConnection urlc = (HttpURLConnection)
                                        (new URL("http://clients3.google.com/generate_204")
                                                .openConnection());
                                urlc.setRequestProperty("User-Agent", "Android");
                                urlc.setRequestProperty("Connection", "close");
                                urlc.setConnectTimeout(1500);
                                urlc.connect();
                                kk= urlc.getResponseCode();
                            } catch (IOException e) {
                                Log.e("qweqwe", "Error checking internet connection", e);
                            }
                            inter=kk;

                            return null;
                        }
                        @Override
                        protected void onPostExecute(String file_url) {

                            if (inter == 204){       
             Toast.makeText(MainActivity3.this, "is connected", Toast.LENGTH_LONG).show();             
                            }else{    

                                Toast.makeText(MainActivity3.this, "No connection", Toast.LENGTH_LONG).show();
                            }

                        }
                    }

相关内容

  • 没有找到相关文章

最新更新