Как я могу получить объект WifiManager внутри Сервиса? - PullRequest
2 голосов
/ 19 февраля 2011

Я пишу приложение для Android, которое порождает сервис, который периодически проверяет состояние Wi-Fi и изменяет его в зависимости от некоторых условий.Моя проблема в том, что всякий раз, когда я пытаюсь создать объект WifiManager для проверки состояния Wi-Fi (и, возможно, управления им), он дает мне неинициализированный объект.Вот код:

public class WifiCheckerService extends Service {

    // Service code and run() method

    private void checkWifi() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        System.out.println(wifi.getConnectionInfo());
        // Rest of code
    }
}

А вот строка в журнале, когда он получает этот код.

02-18 05:22:59.274: INFO/System.out(1170): SSID: <none>, BSSID: <none>, MAC: <none>, Supplicant state: UNINITIALIZED, RSSI: -200, Link speed: -1, Net ID: -1

Очевидно, я не получаю системный объект WifiManager.Я знаю, что это как-то связано с тем, что я работаю в потоке, но у меня все еще возникают проблемы с пониманием концепции и небольшим объяснением того, почему это не работает и как я могу это исправить, было бы очень признательно.

(На некоторой не связанной ноте я думаю, что объяснение также объяснило бы, почему я не могу использовать строку Toast.makeText(getBaseContext(), "Checking Wifi...", Toast.LENGTH_SHORT).show(); в сервисе)

1 Ответ

7 голосов
/ 19 февраля 2011

Вы включили Wi-Fi на своем устройстве?

Если ваш Wi-Fi не включен, он покажет вам выход UNINITIALZED.

Я только что попробовал ваш код, и он работает нормально с включенным Wi-Fi:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo w = wifi.getConnectionInfo();
Log.d(LOG_TAG, w.toString());

Logcat:

E/wpa_supplicant( 4337): wpa_driver_priv_driver_cmd failed
E/wpa_supplicant( 4337): wpa_driver_priv_driver_cmd failed
W/ActivityManager( 1332): Activity idle timeout for HistoryRecord{454624f8 com.xxx.xxx/.ui.SomeScreen}
D/SomeScreen( 4365): SSID: <none>, BSSID: <none>, MAC: 00:26:E8:B7:D2:E0, Supplicant state: DORMANT, RSSI: -200, Link speed: 54, Net ID: -1
...