Android Wifi的forget()操作实例详解

我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息。执行这项操作,我们需要调用WifiManager::forget()函数:
/**
* Delete the network in the supplicant config.
*
* This function is used instead of a sequence of removeNetwork()
* and saveConfiguration().
*
* @param config the set of variables that describe the configuration,
* contained in a {@link WifiConfiguration} object.
* @param listener for callbacks on success or failure. Can be null.
* @throws IllegalStateException if the WifiManager instance needs to be
* initialized again
* @hide
*/
public void forget(int netId, ActionListener listener) {
if (netId < 0) throw new IllegalArgumentException("Network id cannot be negative");
validateChannel();
sAsyncChannel.sendMessage(FORGET_NETWORK, netId, putListener(listener));
}
从函数介绍可知,调用forget()函数,当前网络连接的配置信息就会从wpa_supplicant.conf中删掉;之后这个网络就不会有自动重连的动作,因为conf文件中已经没有该网络的配置信息。
跟踪FORGET_NETWORK消息,WifiServiceImpl::ClientHandler处理:
case WifiManager.FORGET_NETWORK:
if (isOwner(msg.sendingUid)) {
mWifiStateMachine.sendMessage(Message.obtain(msg));
} else {
Slog.e(TAG, "Forget is not authorized for user");
replyFailed(msg, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
}
break;
简单地将该消息转发给WifiStateMachine。此时Wifi是连接状态,WifiStateMachine中当前状态是ConnectedState,它的父状态ConnectModeState处理:
case WifiManager.FORGET_NETWORK:
// Debug only, remember last configuration that was forgotten
WifiConfiguration toRemove
= mWifiConfigStore.getWifiConfiguration(message.arg1);
if (toRemove == null) {
lastForgetConfigurationAttempt = null;
} else {
lastForgetConfigurationAttempt = new WifiConfiguration(toRemove);
}
// check that the caller owns this network
netId = message.arg1;
if (!mWifiConfigStore.canModifyNetwork(message.sendingUid, netId,
/* onlyAnnotate */ false)) {
logw("Not authorized to forget network "
+ " cnid=" + netId
+ " uid=" + message.sendingUid);
replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
WifiManager.NOT_AUTHORIZED);
break;
}
if (mWifiConfigStore.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;
mWifiConfigStore.forgetNetwork():
/**
* Forget the specified network and save config
*
* @param netId network to forget
* @return {@code true} if it succeeds, {@code false} otherwise
*/
boolean forgetNetwork(int netId) {
if (showNetworks) localLog("forgetNetwork", netId);
WifiConfiguration config = mConfiguredNetworks.get(netId);
boolean remove = removeConfigAndSendBroadcastIfNeeded(netId);
if (!remove) {
//success but we dont want to remove the network from supplicant conf file
return true;
}
if (mWifiNative.removeNetwork(netId)) {
if (config != null && config.isPasspoint()) {
writePasspointConfigs(config.FQDN, null);
}
mWifiNative.saveConfig();
writeKnownNetworkHistory(true);
return true;
} else {
loge("Failed to remove network " + netId);
return false;
}
}
根据传入的当前网络的netId,分别调用WifiNative的removeNetwork()、saveConfig()方法删除conf文件的配置信息并进行保存;执行完成后,forget()函数结束了。通过代码我们发现,执行forget()函数并不会引起WifiStateMachine中状态的切换。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# Wifi的forget()操作
# Wifi的forget()操作详解
# Wifi
# forget()
# Android wifi 调试详解及简单实例
# Android 如何查看Wifi密码
# Android判断wifi是5G还是2.4G
# 通过WIFI(不用数据线)连接Android手机调试
# Android获取当前手机网络类型(2g、3g、4g、wifi)以及手机型号、版本号代码
# android编程实现设置、打开wifi热点共享供他人连接的方法
# Android开发之Wifi基础教程
# Android获取当前已连接的wifi信号强度的方法
# 在Android里完美实现基站和WIFI定位
# 就会
# 希望能
# 谢谢大家
# 有时会
# 将该
# 就不会有
# 转发给
# 结束了
# 完成后
# ActionListener
# netId
# lt
# IllegalArgumentException
# throw
# Network
# instance
# initialized
# throws
# IllegalStateException
# void
相关文章:
安徽网站建设与外贸建站服务专业定制方案
如何在阿里云部署织梦网站?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
已有域名如何快速搭建专属网站?
家庭建站与云服务器建站,如何选择更优?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何快速搭建支持数据库操作的智能建站平台?
如何选择高性价比服务器搭建个人网站?
c++ stringstream用法详解_c++字符串与数字转换利器
西安专业网站制作公司有哪些,陕西省建行官方网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
建站之星后台管理如何实现高效配置?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
公司网站的制作公司,企业网站制作基本流程有哪些?
建站主机与虚拟主机有何区别?如何选择最优方案?
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何快速生成可下载的建站源码工具?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
设计网站制作公司有哪些,制作网页教程?
网站app免费制作软件,能免费看各大网站视频的手机app?
盐城做公司网站,江苏电子版退休证办理流程?
建站之星如何实现网站加密操作?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
香港服务器部署网站为何提示未备案?
如何在IIS中新建站点并解决端口绑定冲突?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何在IIS7中新建站点?详细步骤解析
制作营销网站公司,淘特是干什么用的?
建站之星如何助力网站排名飙升?揭秘高效技巧
网站制作壁纸教程视频,电脑壁纸网站?
如何用搬瓦工VPS快速搭建个人网站?
如何用腾讯建站主机快速创建免费网站?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星2.7模板快速切换与批量管理功能操作指南
已有域名和空间,如何快速搭建网站?
,如何利用word制作宣传手册?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
三星网站视频制作教程下载,三星w23网页如何全屏?
焦点电影公司作品,电影焦点结局是什么?
网站制作服务平台,有什么网站可以发布本地服务信息?
如何在云服务器上快速搭建个人网站?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
教学网站制作软件,学习*后期制作的网站有哪些?
如何通过老薛主机一键快速建站?
中山网站制作网页,中山新生登记系统登记流程?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
css网站制作参考文献有哪些,易聊怎么注册?
*请认真填写需求信息,我们会在24小时内与您取得联系。