ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
本节内容从Settings开始,当选择图6-2左图所示的“WPS PIN条目”后,将弹出图6-2右图所 示的WPS设置对话框。该对话框对应的类是WpsDialog中,其代码如下所示。 **WpsDialog.java::WpsDialog** ~~~ public WpsDialog(Context context, int wpsSetup) { super(context); mContext = context; mWpsSetup = wpsSetup; // PIN和PBC方法都在这个WpsDialog中实现 class WpsListener implements WifiManager.WpsListener { public void onStartSuccess(String pin) { if (pin != null) { // WSC PIN启动成功,WPAS将动态创建一个PIN码,此处由WpsDialg显示出来 updateDialog(DialogState.WPS_START, String.format(mContext.getString(R.string.wifi_wps_onstart_pin), pin)); } else {// PBC处理 updateDialog(DialogState.WPS_START, mContext.getString(R.string.wifi_wps_onstart_pbc)); } } public void onCompletion() { updateDialog(DialogState.WPS_COMPLETE, mContext.getString(R.string.wifi_wps_complete)); } public void onFailure(int reason) { ...... } mWpsListener = new WpsListener();// 监听WPS操作的结果 mFilter = new IntentFilter(); // 监听NETWORK_STATE_CHANGED_ACTION广播 mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { handleEvent(context, intent);// handleEvent的代码比较简单,读者不妨自行阅读。 } }; } } ~~~ 我们跳过WpsDialog的onCreate函数直接进入其onStart函数,在该函数中,WpsDialog将借助WifiManager和WifiStateMachine交互,相关代码如下所示。 **WpsDialog.java::onStart** ~~~ protected void onStart() { mTimer = new Timer(false); mTimer.schedule(new TimerTask() { ......// 更新进度条 } , 1000, 1000); mContext.registerReceiver(mReceiver, mFilter); WpsInfo wpsConfig = new WpsInfo();// 构造一个WpsInfo对象 wpsConfig.setup = mWpsSetup;// 对PIN来说,mWpsSetup的值为WpsInfo.DISPLAY // 调用WifiManager的startWps函数,该函数内部将向WifiStateMachine发送START_WPS消息 mWifiManager.startWps(wpsConfig, mWpsListener); } ~~~ 当手机通过WPS成功加入无线网络后,NETWORK_STATE_CHANGED_ACTION广播将在handleEvent中被处理。这部分代码非常简单,请读者自行阅读。 根据代码中的注释可知,startWps将向WifiStateMachine发送START_WPS消息。WifiStateMachine该如何处理它呢?