Android – проверка подключения к Интернету путем проверки URL-адреса

Я разрабатываю приложение для социальной сети, и для большинства функций требуется активное подключение. Иногда телефон подключается к WIFI, но WIFI на самом деле не доступен в Интернете. Обычный менеджер подключений этого не защищает, он просто проверяет, подключен ли телефон или нет. Для этого необходимо настроить httpconnection в фоновом режиме с помощью asynctask.

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
    }
}

Я знаю, что если этот класс включить в каждый класс функций, он должен работать хорошо. Но теперь я хочу повторно использовать код, просто вызвав new checkConnectionStatus().execute().

Поэтому всякий раз, когда пользователь запускает действие в onClick

onClick(){
if(checkConnectionStatus().execute() == false)

как-то так.. это возможно сделать так? Сеть в основном потоке - еще одна проблема.

Пожалуйста помоги. Спасибо


person user3184395    schedule 17.05.2014    source источник


Ответы (2)


Я думаю, это может помочь

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;
person Prabin Byanjankar    schedule 17.05.2014
comment
Как насчет того, чтобы подключиться к WIFI без доступа в Интернет? вернуть истину? - person user3184395; 17.05.2014
comment
он вернет ложь. - person bhadz; 18.05.2014
comment
попробуйте, он вернет false - person Prabin Byanjankar; 18.05.2014

Да, это возможно, но вы не проверяете возвращаемое значение таким образом, вместо этого передаете обратный вызов и вызываете его в onPostExecute AsyncTask.

person nasch    schedule 18.05.2014
comment
Не могли бы вы показать пример на этом? Не знаком с обратным вызовом. Спасибо! - person user3184395; 20.05.2014