我使用了一个函数,通过发送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();
}
}
}