开发者

How can I get a WifiManager Object inside of a Service?

开发者 https://www.devze.com 2023-02-12 04:39 出处:网络
I\'m writing an app for Android that spawns a service that periodically checks the wifi state and changes it based on some conditions. My problem is that whenever I try to create a WifiManager object

I'm writing an app for Android that spawns a service that periodically checks the wifi state and changes it based on some conditions. My problem is that whenever I try to create a WifiManager object to check the state of the wifi (and perhaps control it), it gives me an uninitialized object. Here is the code:

public class WifiChe开发者_运维技巧ckerService 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
    }
}

And here is the line in the log when it gets to this 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

Obviously I'm not getting the system WifiManager object. I know it has something to do with the fact that I am in a service which is a thread, but I am still having trouble understanding the concept and a little explanation about why it's not working and how I can fix it would be greatly appreciated.

(On a sort of unrelated note, I think an explanation would also explain why I can't use the line Toast.makeText(getBaseContext(), "Checking Wifi...", Toast.LENGTH_SHORT).show(); in the service)


Have you enabled the wifi on your device?

If your wifi is not enabled, it will show you UNINITIALZED output.

I just tried your code and it works fine with wifi enabled:

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

精彩评论

暂无评论...
验证码 换一张
取 消