Android-通过ping url检查互联网连接
我正在开发一个社交网络应用程序,大部分功能都需要主动连接。有时手机连接到WIFI,但WIFI并不能真正接入互联网。普通的connectivitymanager无法确保这一点,它只是检查手机是否已连接。为此,它必须使用asynctask在后台设置httpconnectionAndroid-通过ping url检查互联网连接,android,android-asynctask,networkonmainthread,Android,Android Asynctask,Networkonmainthread,我正在开发一个社交网络应用程序,大部分功能都需要主动连接。有时手机连接到WIFI,但WIFI并不能真正接入互联网。普通的connectivitymanager无法确保这一点,它只是检查手机是否已连接。为此,它必须使用asynctask在后台设置httpconnection public class checkConnectionStatus extends AsyncTask<Void, Void, HttpResponse>{ private HttpGet httpGet
public class checkConnectionStatus extends AsyncTask<Void, Void, HttpResponse>{
private HttpGet httpGet;
private HttpParams httpParameters;
private DefaultHttpClient httpClient;
private HttpResponse response;
@Override
protected void onPreExecute() {
String url = "http://www.google.come/";
httpGet = new HttpGet(url);
httpParameters = new BasicHttpParams();
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
httpClient = new DefaultHttpClient(httpParameters);
}
@Override
protected Void doInBackground(Void... params) {
try {
response = httpClient.execute(httpGet);
return response
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return null;
}
@Override
protected void onPostExecute(HttpResponse result) {
super.onPostExecute(result);
// At here i do some thing
}
}
像这样的。。这样做可能吗?主线程上的网络是另一个问题
请帮忙。谢谢我想这可能会有帮助
ConnectivityManager cmgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
NetInfo[] netInfo = cmgr.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
return true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
return true;
}
} catch (Exception e) {
e.getStackTrace();
}
return false;
是的,这是可能的,但您不会像那样检查返回值,而是传入回调并在AsyncTask的onPostExecute中调用它。您连接到WIFI而不访问internet如何?返回true?它将返回false。尝试一下,它将返回false。你能给出这个例子吗?不熟悉回调。谢谢
ConnectivityManager cmgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
try {
NetInfo[] netInfo = cmgr.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
return true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
return true;
}
} catch (Exception e) {
e.getStackTrace();
}
return false;