android wifi刷新数据与连接动画冲突问题的解决方案

本文探讨了Android原生WIFI连接模块中密码错误或连接失败等问题,并提供了通过超时机制来处理这些问题的方法。同时,文章还讨论了Android属性动画与handler消息刷新数据之间的冲突问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android 原生的WIFI连接模块很复杂。

一,应用开发者面临最难的问题之一就是密码错误或者连接失败(

ERROR_AUTHENTICATING/FAILED)的系统广播在应用层基本上是接收不到的。

1,与之相关的系统广播是下面两个,一个是上报连接之后的额外信息,一个是众所周知的WIFI连接状态改变,
    它们的枚举取值分别如下:
  WifiManager.SUPPLICANT_STATE_CHANGED_ACTION
    public static enum DetailedState {
    AUTHENTICATING,
    BLOCKED,
    CAPTIVE_PORTAL_CHECK,
    CONNECTED,
    CONNECTING,
    DISCONNECTED,
    DISCONNECTING,
    FAILED,
    IDLE,
    OBTAINING_IPADDR,
    SCANNING,
    SUSPENDED,
    VERIFYING_POOR_LINK;

    private DetailedState() {
    }
}
WifiManager.NETWORK_STATE_CHANGED_ACTION
public static enum State { CONNECTED, CONNECTING, DISCONNECTED, DISCONNECTING, SUSPENDED, UNKNOWN; private State() { }}
2,密码连接失败的判断需要下列代码:
 int linkWifiResult = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 123);
SupplicantState supplicantState = (SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(supplicantState);
handleWifiStateChanged(state);
if (linkWifiResult == WifiManager.ERROR_AUTHENTICATING) {
  //此代码是系统提供的密码错误的消息广播
}

3,那么该怎样解决这个问题呢?

经测试,密码正常时网络热点的连接需要的时长大约是 5s-20s之间,于是就可以依赖于超时来做上述问题的解决方案。

当然手机厂商一般会在ROM层面做更详备更富有层次性的处理。


二,随后又碰到了android属性动画与利用handler消息wifi刷新数据的冲突问题。

此问题困扰了一天,最终分析定位到最核心的问题所在之后(定位问题的细节,是这样的:

当触发连接之后,显示连接动画,如果此时屏蔽掉系统WIFI消息的处理,则动画能流畅进行。),

最后采取了显示动画过程中,屏蔽掉系统WIFI消息的处理;动画消失时,再刷新界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值