Android 个人热点 wps方式连接流程
android手机开启个人热点时,可以选择WPS连接方式
个人热点端


连接端


当个人热点端选择按钮时,连接端只需要点击WPS按钮即可连接;当个人热点端选择从对等设备获取pin码时,点击连接机的WPS PIN输入,会弹出一个PIN码,这个时候在个人热点端输入相应数字即可连接
public void onClick(DialogInterface dialogInterface, int button) {
if (button == DialogInterface.BUTTON_POSITIVE) {
WpsInfo config = new WpsInfo();
if (mWpsMode == PUSH_BUTTON) {
//按钮参数
config.setup = WpsInfo.PBC;
config.BSSID = "any";
} else if (mWpsMode == PIN_FROM_CLIENT) {
//PIN码参数
config.setup = WpsInfo.DISPLAY;
config.pin = ((EditText) mView.findViewById(R.id.pin_edit)).getText().toString();
}
mWifiManager.startApWps(config);
}
}
在wifimanager里面,则直接调用了IWifiService的startApWps方法
public boolean startApWps(WpsInfo config) {
try {
mService.startApWps(config);
return true;
} catch (RemoteException e) {
return false;
}
}
IWifiService接口的实现类是WiFiServiceImpl
public void startApWps(WpsInfo config) {
enforceChangePermission();
mWifiStateMachine.startApWpsCommand(config);
}
在WifiStateMachine,会发一个消息,根据不同的选项调用相应的native方法去建立连接
public void startApWpsCommand(WpsInfo config) {
sendMessage(obtainMessage(M_CMD_START_AP_WPS, config));
}
case M_CMD_START_AP_WPS:
WpsInfo wpsConfig = (WpsInfo) message.obj;
switch (wpsConfig.setup) {
case WpsInfo.PBC:
mStartApWps = true;
mHotspotNative.startApWpsPbcCommand();
break;
case WpsInfo.DISPLAY:
String pin = mHotspotNative.startApWpsCheckPinCommand(wpsConfig.pin);
Log.d(TAG, "Check pin result:" + pin);
if (pin != null) {
mHotspotNative.startApWpsWithPinFromDeviceCommand(pin);
} else {
Intent intent = new Intent(WifiManager.WIFI_WPS_CHECK_PIN_FAIL_ACTION);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
}
break;
default:
Log.e(TAG, "Invalid setup for WPS!");
break;
}
本文介绍了Android手机通过WPS方式设置个人热点的连接流程。在个人热点端,可以设置WPS连接方式,连接端只需点击WPS按钮或输入PIN码进行连接。在Android系统内部,使用wifimanager调用IWifiService的startApWps方法,由WiFiStateMachine处理连接消息并调用相应的native方法完成连接。

7669

被折叠的 条评论
为什么被折叠?



