全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。