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,Android Wifi的forget()操作实例详解_Android_脚本之家相关推荐

  1. android sharedpre,Android SharedPreferences四种操作模式使用详解_Android_脚本之家

    Android  SharedPreferences详解 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Ac ...

  2. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...

  3. android相册和拍照并裁剪图片大小,Android 拍照并对照片进行裁剪和压缩实例详解...

    Android 拍照并对照片进行裁剪和压缩实例详解 本文主要介绍 Android 调用摄像头拍照并对照片进行裁剪和压缩,文中给出了主要步骤和关键代码. 调用摄像头拍照,对拍摄照片进行裁剪,代码如下. ...

  4. android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解

    1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...

  5. python代码覆盖率测试_unittest+coverage单元测试代码覆盖操作实例详解_python

    这篇文章主要为大家详细介绍了unittest+coverage单元测试代码覆盖操作的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于上一篇文章,这篇文章是关于使用coverage来实现代码 ...

  6. android mvp模式例子_Android中mvp模式使用实例详解

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  7. python编程实例详解-Python编程之列表操作实例详解【创建、使用、更新、删除】...

    这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋友可以参考下 #coding=utf8 ''''' 列表类型也 ...

  8. Android代码删除通知,Android:从通知中删除通知b

    Android:从通知中删除通知b 我已经创建了一个应用程序,并且我设法在android通知栏中添加通知. 现在我需要示例如何从事件通知栏中删除该通知? 11个解决方案 197 votes 你可以尝试 ...

  9. android 代码删除快捷方式,Android创建快捷方式以及删除快捷方式

    /** * * 创建快捷方式 * @param map 快捷方式图标 * @param appName 快捷方式标题 * @param appUrl 快捷方式打开的地址 * @param iconUr ...

最新文章

  1. 收藏 | 图像分割深度学习从零开始学习路线
  2. 关于物体位姿估计方法的总结,及其对应的论文
  3. numpy.dstack详解
  4. PostgreSQL MySQL 兼容性之 - bit 函数和操作符
  5. 爬虫侵入计算机系统,【探讨】利用“爬虫技术”获取数据行为的刑事考量 ——以一起非法获取计算机信息系统数据案为例...
  6. python异常处理_Python入门 断言与异常处理
  7. 讨论:多核CPU+ASIC的防火墙在以后是发展方向吗?
  8. 斗鱼的sidebar的实现简陋的demo
  9. python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
  10. 深度学习花书-2.9 伪逆矩阵
  11. PHP composer作用,php-composer作用分析
  12. 利用计算机可视化画一个矩形,可视化程序设计大作业题目
  13. win10专业版和企业版的区别_win10家庭版和专业版区别
  14. RS笔记:传统推荐模型之FFM (引入特征域的概念) [2015 Criteo]
  15. 产品经理的六大工作职责
  16. 26 岁年薪百万!华为最新“天才少年”曝光,学霸兼 B 站 UP 主,还爱跳街舞
  17. Access Violation
  18. 适合安装在服务器上使用的操作系统,适合于做服务器的操作系统有
  19. hadoop组件---spark----全面了解spark以及与hadoop的区别
  20. Unity——延时执行的几种方法

热门文章

  1. springboot之整合mybatis
  2. Python numpy 多维数组切片
  3. mac php 403,mac下配置apache以及403问题
  4. opencv安装教程python3.7_Python3.7中安装openCV库的方法
  5. 写一个带输入输出的存储过程_携程大佬带你写一个可扩展的Spring插件。
  6. PyCharm社区版支持深度学习_在Windows的Ubuntu子系统运行支持CUDA的深度学习代码
  7. idea2018版本集成mysql_idea如何集成mysql
  8. Android Studio如何隐藏系统的状态栏
  9. oracle服务没有了 原因,一例oracle服务无法启动的原因及解决方法
  10. 零基础学cad要多久_完整版的CAD技巧!3天轻松玩转CAD,零基础也能学会