Witam. Mam taką sytuację:
W mojej aplikacji startuję usługę, która ma swój wątek uruchamiany w onStartCommand. Wątek usługi w pętli wykonuje sekwencję zadań - sprawdza warunki dotyczące WiFi (gdy wszystkie są spełnione to wyłącza moduł WiFi), przechodzi w stan uśpienia (od kilkunastu sekund do kilku minut) - i tak w kółko. Ma to na celu wyłączenie WiFi, gdy nie ma dostępu do Internetu, a więc najpewniej gdy zasięg został utracony, ale też gdy nie zostało ustanowione połączenie pozwalające na dostęp do Internetu.
Wyłączanie modułu WiFi robię przez:
WifiManager wifiManager;
wifiManager.setWifiEnabled(false);
Przy tym oglądam logi w Eclipsie.
Przykładowa sytuacja:
Nie znajduję się w obrębie znajomej sieci. Włączam program, aktywuję z niego wspomnianą usługę. Włączam moduł WiFi i... po jakimś czasie (różnym, czasem parę sekund, czasem nawet minuta) uruchamia się systemowe automatyczne skanowanie i próby łączenia do sieci w pobliżu, towarzyszy temu wizualny alert i ma to miejsce również gdy ekran jest wyłączony.
Ja oczekuję, aby mimo to, moja aplikacja (w przypadku spełnienia odpowiednich warunków - braku połączenia ze znaną siecią) skutecznie wyłączyła moduł WiFi, albo przynajmniej, aby skanowanie to szybko się skończyło i wtedy moduł ma być wyłączony.
Wszystko jest OK, dopóki smartfon jest podłączony do komputera. Oglądam logi; widzę na nich, że moduł WiFi został przez aplikację wyłączony; włączam ekran, widzę mignięcie zamykającego się alertu auto-skanowania sieci i rzeczywiście moduł jest wyłączony.
Jednak w przypadku gdy smartfon nie jest podłączony do komputera, zaś ekran jest wyłączony i rozpocznie się takie skanowanie (a przypomnę, że często rozpoczyna się ono ze zwłoką, np. po wyłączeniu ekranu) potrafiące trwać chyba bez końca (nawet kilka godzin wg moich spostrzeżeń), to nie pozwala to na wyłączenie modułu. Po włączeniu ekranu jeszcze przez jakiś czas obserwuję to skanowanie i status modułu WiFi informujący o jego aktywności.
Gdy po kilku godzinach włączę ekran, a w międzyczasie rozpoczęło się to auto-skanowanie, to zostaje ono po jakimś czasie ukończone (oczywiście bez rezultatu) i dopiero! wtedy wyłącza się moduł, a jak wiadomo niepotrzebnie zużywa to energię i ogólnie nie jest to pożądane.
Czy ktoś wie co zrobić, aby moduł WiFi po spełnieniu warunków aplikacji został przez nią jak najszybciej wyłączony?