Android settings之Wifi学习 - 图文(3)

2020-02-20 22:41

AccessPoint accessPoint = new AccessPoint(getActivity(), result);

accessPoints.add(accessPoint);

apMap.put(accessPoint.ssid, accessPoint);

/// M: add ap to category @{ if (mExt.isCatogoryExist()) { if

(mExt.isTustAP(accessPoint.ssid,accessPoint.security)) {

mTrustAPCategory.addPreference(accessPoint); } else {

mNewAPCategory.addPreference(accessPoint); } } } } }

/// M: refresh category

mExt.refreshCategory(getPreferenceScreen()); ArrayList origAccessPoints = new ArrayList(accessPoints.size()); origAccessPoints.addAll(accessPoints); try {

Collections.sort(accessPoints); } catch (ClassCastException e) { Xlog.d(TAG,\exception;origAccessPoints=\ + origAccessPoints);

return origAccessPoints;

} catch (UnsupportedOperationException e) { Xlog.d(TAG,\exception;origAccessPoints=\ + origAccessPoints);

return origAccessPoints; }

return accessPoints;

} 3. 配置 AP 参数

当用户在 WifiSettings 界面上选择了一个 AP 后,会显示配置 AP 参数的一个对话框 @Override

public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {

if (preference instanceof AccessPoint) {

mSelectedAccessPoint = (AccessPoint) preference; /** Bypass dialog for unsecured, unsaved networks */

if (mSelectedAccessPoint.security == AccessPoint.SECURITY_NONE && mSelectedAccessPoint.networkId == INVALID_NETWORK_ID) { /// M: support open ap wps test @{

if (mSelectedAccessPoint.isOpenApWPSSupported()) { showDialog(mSelectedAccessPoint, false); } else {

mSelectedAccessPoint.generateOpenNetworkConfig();

mWifiManager.connect(mSelectedAccessPoint.getConfig(), mConnectListener);

mManuallyConnect = true; } } else {

showDialog(mSelectedAccessPoint, false); } } else {

return super.onPreferenceTreeClick(screen, preference); }

return true;

}

如果WIFI没有加密,直接调用mSelectedAccessPoint.generateOpenNetworkConfig()生成一个不加密的WifiConfiguration;如果是加密的WIFI,就调用showConfigUi()方法来显示输入密码框

private void showDialog(AccessPoint accessPoint, boolean edit) { if (mDialog != null) {

removeDialog(WIFI_DIALOG_ID); mDialog = null;

mAccessPointSavedState = null; }

// Save the access point and edit mode mDlgAccessPoint = accessPoint; mDlgEdit = edit;

showDialog(WIFI_DIALOG_ID); }

@Override

public Dialog onCreateDialog(int dialogId) { switch (dialogId) {

case WIFI_DIALOG_ID:

AccessPoint ap = mDlgAccessPoint; // For manual launch if (ap == null) { // For re-launch from saved state if (mAccessPointSavedState != null) {

ap = new AccessPoint(getActivity(), mAccessPointSavedState);

// For repeated orientation changes mDlgAccessPoint = ap; } }

// If it's still null, fine, it's for Add Network mSelectedAccessPoint = ap;

/// M: record priority of selected ap @{ if (mSelectedAccessPoint != null && mSelectedAccessPoint.getConfig() != null) {

//store the former priority value before user modification

mExt.recordPriority(mSelectedAccessPoint.getConfig().priority); } else {

mExt.recordPriority(-1); }

mDialog = new WifiDialog(getActivity(), this, ap, mDlgEdit); return mDialog; }

return super.onCreateDialog(dialogId);

}

这段代码保存accessPoint后就调用showDialog(WIFI_DIALOG_ID)了,在onCreateDialog()初始化方法中判断mDlgAccessPoint是否为null,如果为null就调用AccessPoint的第三个构造方法从保存的状态中生成一个AccessPoint,最后new WifiDialog(getActivity(), this, ap, mDlgEdit)生成一个WifiDialog,这个WifiDialog继承自AlertDialog,也就是它,最终将对话框展现在我们面前,WifiDialog构造函数的第二个参数为DialogInterface.OnClickListener的监听器,设置为this表示类本身对按钮点击事件进行响应

4. 连接AP

public void onClick(DialogInterface dialogInterface, int button) {

if (button == WifiDialog.BUTTON_FORGET && mSelectedAccessPoint != null) { forget();

} else if (button == WifiDialog.BUTTON_SUBMIT) { submit(mDialog.getController()); }

代码判断弹出的对话框是WIFI热点抛弃还是WIFI连接,并做出相应的处理 void submit(WifiConfigController configController) {

final WifiConfiguration config = configController.getConfig(); try {

if (config != null && FeatureOption.MTK_EAP_SIM_AKA && config.IMSI != null) {

if (config.toString().contains(\SIM\) || config.toString().contains(\)) {

// cannot use eap-sim/aka under airplane mode

if (Settings.System.getInt(this.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1) { Toast.makeText(getActivity(),

R.string.eap_sim_aka_airplanemode, Toast.LENGTH_LONG).show(); return; }

// cannot use eap-sim/aka without a sim/usimcard if (config.IMSI.equals(\)) { Toast.makeText(getActivity(),

R.string.eap_sim_aka_no_sim_error, Toast.LENGTH_LONG).show(); return; }

// cannot use eap-sim/aka if user doesn't select a sim slot if ((FeatureOption.MTK_GEMINI_SUPPORT) && (config.IMSI.equals(\))) {

Toast.makeText(getActivity(),

R.string.eap_sim_aka_no_sim_slot_selected,Toast.LENGTH_LONG).show(); return; } }

}

} catch (Exception e) {

Xlog.d(TAG,\ + e.toString()); }

手动设置就调用被点击AccessPoint 项的getConfig()方法读取WifiConfiguration信息,如果不为null调用connectNetwork(mSelectedAccessPoint.networkId)连接网络。


Android settings之Wifi学习 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Agilent1100高压液相色谱仪维护保养知识

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: