与WifiMonitor.java负责监控supplicant状态不同,WifiService.java负责给supplicant下命令,WifiService.java是framework中wifi的核心模块。
1 WifiService是server端,WifiManager是client端
WifiService处理WifiManager发来的各种命令
2 AsyncChannel是WifiService和WifiManager的通信手段
3 打开/关闭wifi时WifiService对应的log 03-26 15:07:28.716 D/WifiService( 937): setWifiEnabled: true pid=22392, uid=1000
03-26 15:07:28.716 E/WifiService( 937): Invoking mWifiStateMachine.setWifiEnabled
03-26 15:07:28.779 D/WifiService( 937): setWifiEnabled: false pid=22392, uid=1000
03-26 15:07:28.779 E/WifiService( 937): Invoking mWifiStateMachine.setWifiEnabled
4 scan request对应的WifiService log
03-26 14:11:12.032 I/WifiService( 937): process 7011 request wifi scan
03-26 14:12:33.106 I/WifiService( 937): process 2660 request wifi scan
03-26 14:18:21.594 I/WifiService( 937): process 19407 request wifi scan
03-26 14:19:32.615 I/WifiService( 937): process 4354 request wifi scan
03-26 14:33:00.377 I/WifiService( 937): process 19002 request wifi scan
5 disconnect对应的WifiService log
03-26 14:54:41.758 D/WifiService( 937): Client connection lost with reason: 4
6 第一次连接AP对应的WifiService log
03-26 15:08:43.890 E/WiFiServiceImpl ( 937): CONNECT nid=-1 uid=1000
03-26 15:08:43.892 D/WifiService( 937): Connect with config* ID: -1 SSID: "谢其锋的 iPhone" BSSID: null FQDN: null REALM: null PRIO: 0
第一次连接是对应的id=-1
连接过的AP对应的WifiService log为
03-26 15:10:49.001 E/WiFiServiceImpl ( 937): CONNECT nid=0 uid=1000
03-26 15:10:49.002 D/WifiService( 937): Connect with networkId0
对应的代码为
if (msg.what == WifiManager.CONNECT_NETWORK) {
if (config != null) {
if (config.networkId == WifiConfiguration.INVALID_NETWORK_ID) {
config.creatorUid = Binder.getCallingUid();
} else {
config.lastUpdateUid = Binder.getCallingUid();
}
}
Slog.e("WiFiServiceImpl ", "CONNECT "
+ " nid=" + Integer.toString(networkId)
+ " uid=" + Binder.getCallingUid());
}
if (config != null && config.isValid()) {
if (DBG) Slog.d(TAG, "Connect with config" + config);
mWifiStateMachine.sendMessage(Message.obtain(msg));
} else if (config == null
&& networkId != WifiConfiguration.INVALID_NETWORK_ID) {
if (DBG) Slog.d(TAG, "Connect with networkId" + networkId);
mWifiStateMachine.sendMessage(Message.obtain(msg));
}