Den*_*nis 2 android android-service android-wifi
我正在为Android编写一个应用程序,它会生成一个定期检查wifi状态并根据某些条件更改它的服务.我的问题是,每当我尝试创建一个WifiManager对象来检查wifi的状态(并且可能控制它)时,它就会给我一个未初始化的对象.这是代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
这是代码到达此代码时日志中的行.
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
Run Code Online (Sandbox Code Playgroud)
显然我没有得到系统WifiManager对象.我知道这与我在一个线程服务中的事实有关,但我仍然无法理解这个概念,并且对于它为什么不起作用以及如何解决它的一些解释将非常感激.
(在一种不相关的说明中,我认为解释也可以解释为什么我不能Toast.makeText(getBaseContext(), "Checking Wifi...", Toast.LENGTH_SHORT).show();在服务中使用该行)
你在设备上启用了wifi吗?
如果您的wifi未启用,它将显示UNINITIALZED输出.
我刚试过你的代码,启用wifi后效果很好:
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo w = wifi.getConnectionInfo();
Log.d(LOG_TAG, w.toString());
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9559 次 |
| 最近记录: |