栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

安卓7.1忘记某个wifi流程分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓7.1忘记某个wifi流程分析

设置中点击wifi名称—取消保存调用流程跟踪

sdkpackagesappsSettingssrccomandroidsettingswifiWifiConfigController.java
public WifiConfigController(WifiConfigUiBase parent, View view, AccessPoint accessPoint,
int mode) {
mConfigUi = parent;
if (mAccessPoint.isSaved() || mAccessPoint.isActive()) {
mConfigUi.setForgetButton(res.getString(R.string.wifi_forget)); //此处设置取消保存显示内容
}mConfigUi相当于WifiDialog

调用wifi取消保存点击事件之后 packages/apps/Settings/src/com/android/settings/wifi/WifiDialog.java:116
protected void onCreate(Bundle savedInstanceState) {
mView = getLayoutInflater().inflate(R.layout.wifi_dialog, null);
setView(mView);
setInverseBackgroundForced(true);
mController = new WifiConfigController(this, mView, mAccessPoint, mMode); //传入WifiDialog给WifiConfigController
super.onCreate(savedInstanceState);

    if (mHideSubmitButton) {
        mController.hideSubmitButton();
    } else {
        
        mController.enableSubmitIfAppropriate();
    }

    if (mAccessPoint == null) {
        mController.hideForgetButton();
    }
}




  public WifiDialog(Context context, WifiDialogListener listener, AccessPoint accessPoint,
        int mode) {
    super(context);
    mMode = mode;
    mListener = listener;
    mAccessPoint = accessPoint;
    mHideSubmitButton = false;
}

  public void onClick(DialogInterface dialogInterface, int id) {
    if (mListener != null) {
        switch (id) {
            case BUTTON_SUBMIT:
                mListener.onSubmit(this);
                break;
            case BUTTON_FORGET:
                if (WifiSettings.isEditabilityLockedDown(
                        getContext(), mAccessPoint.getConfig())) {
                    RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
                            RestrictedLockUtils.getDeviceOwner(getContext()));
                    return;
                }
                mListener.onForget(this);
                break;
        }
    }
}

packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java +799
public class WifiSettings extends RestrictedSettingsFragment
implements Indexable, WifiTracker.WifiListener, AccessPointListener,
WifiDialog.WifiDialogListener
mDialog = new WifiDialog(getActivity(), this, ap, mDialogMode, //传入Listener
false);

public void onForget(WifiDialog dialog) {   WifiDialogListener   接口函数在此处实现
    forget();
}

第一步
void forget() {
MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_FORGET);
if (!mSelectedAccessPoint.isSaved()) {
if (mSelectedAccessPoint.getNetworkInfo() != null &&
mSelectedAccessPoint.getNetworkInfo().getState() != State.DISCONNECTED) {
// Network is active but has no network ID - must be ephemeral.
mWifiManager.disableEphemeralNetwork(
AccessPoint.convertToQuotedString(mSelectedAccessPoint.getSsidStr()));
} else {
// Should not happen, but a monkey seems to trigger it
Log.e(TAG, "Failed to forget invalid network " + mSelectedAccessPoint.getConfig());
return;
}
} else {
mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, mForgetListener);
}

    mWifiTracker.resumeScanning();

    // We need to rename/replace "Next" button in wifi setup context.
    changeNextButtonState(false);
}

第二步
mWifiManager.forget-> frameworks/base/wifi/java/android/net/wifi/WifiManager.java
public void forget(int netId, ActionListener listener) {
if (netId < 0) throw new IllegalArgumentException(“Network id cannot be negative”);
getChannel().sendMessage(FORGET_NETWORK, netId, putListener(listener));
}

第三步
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
case WifiManager.FORGET_NETWORK:
// Only the current foreground user can modify networks.
if (!mWifiConfigManager.isCurrentUserProfile(
UserHandle.getUserId(message.sendingUid))) {
loge(“Only the current foreground user can modify networks "
+ " currentUserId=” + mWifiConfigManager.getCurrentUserId()
+ " sendingUserId=" + UserHandle.getUserId(message.sendingUid));
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
break;
}

                // Debug only, remember last configuration that was forgotten
                WifiConfiguration toRemove
                        = mWifiConfigManager.getWifiConfiguration(message.arg1);
                if (toRemove == null) {
                    lastForgetConfigurationAttempt = null;
                } else {
                    lastForgetConfigurationAttempt = new WifiConfiguration(toRemove);
                }
                // check that the caller owns this network
                netId = message.arg1;

                if (!mWifiConfigManager.canModifyNetwork(message.sendingUid, netId,
                         false)) {
                    logw("Not authorized to forget network "
                         + " cnid=" + netId
                         + " uid=" + message.sendingUid);
                    replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
                            WifiManager.NOT_AUTHORIZED);
                    break;
                }

                if (mWifiConfigManager.forgetNetwork(message.arg1)) {
                    replyToMessage(message, WifiManager.FORGET_NETWORK_SUCCEEDED);
                    broadcastWifiCredentialChanged(WifiManager.WIFI_CREDENTIAL_FORGOT,
                            (WifiConfiguration) message.obj);
                } else {
                    loge("Failed to forget network");
                    replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
                            WifiManager.ERROR);
                }
                break;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号