关于wifi的连接部分,这里分了三个步骤:

1.开启WiFi

·用户在设置界面开启WiFi,调用Settings应用程序的WifiEnabler.setWifiEnabled,然后调用WifiManager.setWifiEnabled。 ·WifiManager.setWifiEnabled通过Binder机制调用WifiService.setWifiEnabled。这里的WifiService也就是WiFi的Java层的内容。 ·WifiService.setWifiEnabled将MESSAGE_ENABLE_WIFI消息发送到自己的消息队列。 ·WifiService通过WifiHandler的handleMessage处理MESSAGE_ENABLE_WIFI,调用setWifiEnabledBlocking。setWifiEnabledBlocking调用setWifiEnabledState,向外发出WIFI_STATE_CHANGED_ACTION通知消息。另外,它还完成一些初始工作,如设置当前状态、加载WiFi驱动、开启wpa_supplicant、开启WifiStateTracker、注册BroadcastReceiver监视WifiStateTracker的消息等。这些内容在WifiService.java中。 ·由于WifiEnabler初始化时注册了BroadcastReceiver,因此它会获得这个通知消息,进入handleWifiStateChanged处理一些内部状态以及显示。 ·WifiLayer也同样获得了这个通知消息,至此,WiFi开启完成。 2.查找AP WiFi查找AP的过程如下: ·Settings应用程序的WifiLayer.attemptScan调用WifiManager.startScan。 ·Settings应用程序的WifiManager.startScan通过Binder机制调用WifiService.startScan。 ·WiFi服务层的WifiServiceWifiNative.scanCommand通过WifiNative发送扫描命令给wpa_command来完成这一发送过程。至此,命令发送成功。 ·命令的最终响应由wpa_supplicant上报“SCAN-RESULTS”消息,WifiStateTracker开启的WifiMonitor的MonitorThread可以获取次消息并交由handleEvent处理。 ·handleEvent的处理方式是调用WifiStateTracker.notifyScanResultsAvailable。 ·在WifiStateTracker中,通过EVENT_SCAN_RESULTS_AVAILABLE完成消息传递,调用sendScanResultsAvailable将SCAN_RESULTS_AVAILABLE_ACTION通知消息广播出去。 ·WifiLayer会最终获得这个通知消息,调用handleScanResultsAvailable继续处理。次函数会根据返回的AP数据建立对应的处理结构,并完成对应界面的绘制,以供用户操作AP列表。至此,AP查找完成,也完成了一次典型的自上而下、再自下而上的情景。 3.连接AP WiFi连接AP的步骤如下: ·单击AP列表的某个项目后,会弹出AccessPointDialog对话框,单击“连接”按钮,将handleConnect转化为到WifiLayer.connectToNetwork的调用。 ·在connectToNetwork中完成一些查找和配置,再通过managerEnableNetwork调用WifiManager.enableNetwork。 ·连接的中间流程与查找AP的流程类似,都经过了WifiMonitor对“CONNECTED”消息响应的捕获,以及WifiStateTracker对EVENT_SUPPLICANT_STATE_CHANGED的处理。还有一个比较重要的步骤是WifiStateTracker通过对DHCP服务器的申请进行了IP地址分配。最终会广播NETWORK_STATE_CHANGED_ACTION消息,有WifiLayer响应。

更多相关文章

  1. 【Android】进程通信IPC——Messenger
  2. Android(安卓)SystemServer学习之二
  3. Android(安卓)4.4 KitKat NotificationManagerService使用详解与
  4. Android通过PendingIntent实现消息通知
  5. 如何使用好android的可访问性服务(Accessibility Services)
  6. android 5.0以上通知栏、状态栏图标变成白色
  7. android ssl验证、https验证
  8. Android提供语音搜索功能
  9. linux下如何为刚安装好的Eclipse在桌面建一个启动图标???(QtCreator

随机推荐

  1. android中SharedPreferences和Preference
  2. android实现开机欢迎界面
  3. ListView使用技巧
  4. 【学习笔记】android基本环境
  5. ANDROID模拟器不能启动
  6. Android(安卓)屏幕适配
  7. Android实现系统重新启动
  8. android:versionCode和android:versionNa
  9. Listview
  10. Android开发平台部署