Диспетчер подключений всегда определяет наличие подключения к Интернету

Я пытаюсь проверить, подключено ли мое устройство к Интернету, прежде чем выполнять операции, требующие подключения. В настоящее время я использую виртуальное устройство Android с кодами ниже. Странно то, что он всегда сообщает true (что означает наличие подключения к Интернету), даже когда я ожидаю, что он вернет false. Это вызывает проблемы с моим приложением. Я пробовал много других решений, включая пример в документации разработчика Android с тем же результатом. Что я делаю не так?

Примечание. Я безуспешно передал как Activity, так и Activity::getApplicationContext как объекты Context.

     public boolean isConnectedToInternet() {
        ConnectivityManager connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        Log.v(this.getClass().getName(), info[i].toString());
                        return true;
                    }

        }
        return false;

}


person Stefano Mtangoo    schedule 26.08.2014    source источник


Ответы (2)


Попробуй это:

final Handler mHandler = new Handler();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            mHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                     Context context = getApplicationContext();
                                     ConnectivityManager connMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
                                     NetworkInfo networkInfo = null;
                                         networkInfo = connMgr.getActiveNetworkInfo();
                                         if (networkInfo != null && networkInfo.isConnected())
                                         {
                                             //Perform operation what yyou want to perform when you got Internet connection

                                         } 
                                    }
                            });
                            Thread.sleep(10000);
                        } catch (Exception e) {
                        }
                    }
                }
            }).start();

Надеюсь, это может помочь вам!

person Krupa Patel    schedule 26.08.2014

С кодом проблем нет. Проблема заключалась в том, что я пытался отключить Интернет на хост-машине (ноутбуке) вместо самого телефона. Просто отключите мобильные данные и соединения Wi-Fi через настройку (в AVD), и тогда все заработает.

person Stefano Mtangoo    schedule 27.08.2014