android4.4如何不保存连接验证失败的WiFi热点

软件版本:Android4.4

硬件平台:MTK


发现Android4.4的WiFi连接之后,不论密码对或者错误都是会进入到已保存的状态,个人感觉有些不太合理。

我们的产品需求需要添加两种用户提示:其一,超时提醒;其二,密码验证失败提醒。

我这边关于这两种情况的实现是做了toast提示。

密码错误的提示如下:

--- a/vendor/vinci/packages/apps/VinciSettings/src/com/android/settings/wifi/WifiSettings.java
+++ b/vendor/vinci/packages/apps/VinciSettings/src/com/android/settings/wifi/WifiSettings.java

@@ -1219,6 +1236,15 @@ public class WifiSettings extends RestrictedSettingsFragment
///@}
updateAccessPoints();
} else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
+ int linkWifiResult = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 123);
+ if (linkWifiResult == WifiManager.ERROR_AUTHENTICATING) {
+ mHandler.removeMessages(100);
+ if (mConnectingDialog.isShowing()) {
+ mConnectingDialog.dismiss();
+ CustomToast.makeText(getActivity(), getString(R.string.vinci_wifi_passwd_error), Toast.LENGTH_LONG).show();
+ return;
+ }
+ }

在密码验证失败之后framework中的wpa监听类会发出相应的事件广播EXTRA_SUPPLICANT_ERROR其中密码校验错误码为123,做如上修改即可弹出toast提示相关信息。

至于超时提醒,就需要在用户点击连接按钮之后,就发出一个超时的msg(比如30s后发出),如果进入到连接成功的事件处理逻辑,就把该msg remove掉即可。


下面看连接失败,如何不保存config的问题,4.4的逻辑,只要状态机有接收到连接的状态指令,不论成功与否就会调用保存的接口去保存配置,而连接失败之后,是没有再做删除之类的处理的,因此我来做。。。。。。


--- a/vendor/vinci/packages/apps/VinciSettings/src/com/android/settings/wifi/WifiSettings.java
+++ b/vendor/vinci/packages/apps/VinciSettings/src/com/android/settings/wifi/WifiSettings.java

@@ -1218,6 +1219,15 @@ public class WifiSettings extends RestrictedSettingsFragment
}
}

+ //We do not save the config which authenticating error
+ private void vinciUnsaveSpot() {
+ List<WifiConfiguration> savedConfigs = mWifiManager.getConfiguredNetworks();
+ Xlog.i(TAG, "====== savedConfigs size: " + savedConfigs.size());
+
+ if (null != savedConfigs)
+ mWifiManager.forget((savedConfigs.size() - 1), mForgetListener);
+ }
+

private void handleEvent(Context context, Intent intent) {
if (DBG) Log.d(TAG, "handleEvent(Context context, Intent intent) ");

@@ -1238,6 +1248,7 @@ public class WifiSettings extends RestrictedSettingsFragment
} else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
int linkWifiResult = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 123);
if (linkWifiResult == WifiManager.ERROR_AUTHENTICATING) {
+ vinciUnsaveSpot();
mHandler.removeMessages(100);
if (mConnectingDialog.isShowing()) {
mConnectingDialog.dismiss();

这是21世纪初,最伟大的发明创造之一,错误WiFi连接不保存!!!


简单说明一下这段看似简单改动的小插曲:

因为wifisettings中对每一个submit的热点都会封装为一个config文件,那么在该文件做一个全局的最近连接的config变量,然后失败了直接删除该config的netID可以吗?

答案是不可以,因为在未经过wifistatemachine保存之前,该config的id是-1,即为invalid状态,是无法删除的。。。

而在经过状态机下发connect命令,然后再保存之后,netID会做一次更新排序,从0开始往后递增,即第一个config的id是0,第二个保存的config的id是1,以此类推。

而最近的保存的一个失败的(不管成功失败)id就是config列表的size-1,因此需要从逻辑上获取configs列表,然后如果连接失败,删除掉最后一个即size-1的config即可。


完成~~~






































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值