Проверка NetworkAvailability возвращает false, но телефон подключен - PullRequest
1 голос
/ 19 июля 2010

У меня возникли проблемы с получением непротиворечивых результатов при проверке доступности сети.

Я использую этот фрагмент кода внутри класса AppPreferences для проверки доступности сети.

/**
     * @return the networkAvailable
     */
    public boolean isNetworkAvailable() {
        connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        networkAvailable = connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected();
        return networkAvailable;
    }

Перед каждым запуском я устанавливаю контекст следующим образом:

timer.scheduleAtFixedRate(

                new TimerTask() {

                    public void run() {

                        appPreferences.setContext(getBaseContext());

                        if (appPreferences.isNetworkAvailable()){

                            // perform task

                        }

                    }
                },
                0,
                UPDATE_INTERVAL);

Я знаю, что он не привязан к фоновому потоку, так как у меня вызов onReceive, выполняющий ту же логику, и все же эта проверка не проходит.

Кажется, что это преимущественно происходит, когда он перемещается между сотовой связью для передачи данных и Wi-Fi, или наоборот. Кажется, что контекст, в котором он был запущен, остается прежним, хотя я обновляю его.

Кто-нибудь знает, что может быть здесь проблема?

1 Ответ

1 голос
/ 19 июля 2010

Кажется, что информация об активной сети останется в состоянии, когда запущен контекст службы / действия / получателя.Следовательно, если вы запустите его в сети, а затем отключитесь от него (то есть перейдете с 3G на Wifi и отключите соединение 3G), оно останется на первом активном соединении, заставляя приложение полагать, что телефон отключен, даже если это не так.

Мне кажется, что лучшим решением является использование пользователя getApplicationContext, поскольку он не будет привязан к моменту запуска конкретной "задачи".

Обновление: Связанов том, что если вы долгое время запускаете приложения на Android (в частности, на Nexus One) при подключении к Wi-Fi, убедитесь, что вы не разрешаете Wi-Fi спать, когда экран спит.Вы сможете установить это в разделе «Дополнительно» в разделе «Беспроводные сети».

...