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
相关文章:
兔展官网 在线制作,怎样制作微信请帖?
制作网站的软件免费下载,免费制作app哪个平台好?
建站主机是否等同于虚拟主机?
宿州网站制作公司兴策,安徽省低保查询网站?
宝塔新建站点为何无法访问?如何排查?
已有域名和空间如何搭建网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何快速搭建个人网站并优化SEO?
定制建站方案优化指南:企业官网开发与建站费用解析
b2c电商网站制作流程,b2c水平综合的电商平台?
如何访问已购建站主机并解决登录问题?
建站主机数据库如何配置才能提升网站性能?
C++如何使用std::optional?(处理可选值)
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Bpmn 2.0的XML文件怎么画流程图
如何在Windows环境下新建FTP站点并设置权限?
建站之星展会模版如何一键下载生成?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
教程网站设计制作软件,怎么创建自己的一个网站?
如何在腾讯云服务器上快速搭建个人网站?
如何选择高性价比服务器搭建个人网站?
如何设置并定期更换建站之星安全管理员密码?
如何快速生成可下载的建站源码工具?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星如何优化SEO以实现高效排名?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何用5美元大硬盘VPS安全高效搭建个人网站?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
XML的“混合内容”是什么 怎么用DTD或XSD定义
Python多线程使用规范_线程安全解析【教程】
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
如何选择域名并搭建高效网站?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
在线制作视频的网站有哪些,电脑如何制作视频短片?
微课制作网站有哪些,微课网怎么进?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
网站制作网站,深圳做网站哪家比较好?
制作网站的基本流程,设计网站的软件是什么?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
制作农业网站的软件,比较好的农业网站推荐一下?
,网站推广常用方法?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
营销式网站制作方案,销售哪个网站招聘效果最好?
,石家庄四十八中学官网?
建站之星免费版是否永久可用?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
*请认真填写需求信息,我们会在24小时内与您取得联系。