2011-02-19 39 views
1

我正在爲Android編寫一個應用程序,該應用程序會產生一個定期檢查wifi狀態並根據某些條件更改它的服務。我的問題是,每當我嘗試創建一個WifiManager對象來檢查WiFi的狀態(也許控制它)時,它會給我一個未初始化的對象。這裏是代碼:如何獲取服務中的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();

+0

「很顯然,我沒有得到系統WifiManager對象。」 - 當然可以。您認爲您還從LogCat中獲得了正確的輸出結果嗎? – CommonsWare 2011-02-19 00:54:35

回答

4

您已經啓用了設備上的WiFi?

如果您的wifi沒有啓用,它會顯示您未初始化輸出。

我只是想你的代碼,使它正常工作帶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 
+0

你是對的。我正在AVD上嘗試這個。我甚至無法啓動無線網絡。謝謝。我現在覺得很愚蠢:P – 2011-02-19 02:18:36

相關問題