3

定期的にwifiの状態をチェックし、いくつかの条件に基づいて変更するサービスを生成するAndroid用のアプリを書いています。私の問題は、Wi-Fiの状態をチェックする(そしておそらくそれを制御する)ためにWifiManagerオブジェクトを作成しようとすると、初期化されていないオブジェクトが表示されることです。コードは次のとおりです。

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();

4

1 に答える 1

8

デバイスでWi-Fiを有効にしましたか?

Wi-Fiが有効になっていない場合は、UNINITIALZED出力が表示されます。

私はあなたのコードを試しましたが、wifiを有効にすると正常に動作します:

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
于 2011-02-19T00:31:41.530 に答える