Android-通过ping url检查互联网连接

Android-通过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

我正在开发一个社交网络应用程序,大部分功能都需要主动连接。有时手机连接到WIFI,但WIFI并不能真正接入互联网。普通的connectivitymanager无法确保这一点,它只是检查手机是否已连接。为此,它必须使用asynctask在后台设置httpconnection

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;