Android 无线连接及连接状态研究

经研究Android无线连接核心代码WifiManager.java,还是有所发现的。

 

核心代码如下:

 

  1. connect(WifiConfiguration config, ActionListener listener)110429_dkFX_165872.png
  2. connect(int networkId, ActionListener listener)110429_uLOM_165872.png
  3. save(WifiConfiguration config, ActionListener listener)110429_9U7W_165872.png

如上connect函数,它是一个系统级别的API,而且是被隐藏的,所以在非系统APP中该方法是不可以被调用到的。对非系统APP而言,如果要连接指定的无线网络,只能采用如下顺序已达到该方法的目的:addNetwork、enableNetwork、saveConfiguration和reconnect等。

 

而且系统API对于每个操作都有结果回调操作,监听接口为ActionListener,其主要代码如下:

110429_NiJw_165872.png

 

ActionListener,包含两个回调函数onSuccess和onFailure。本次研究我们主要关心OnFailure的情况。在以下情况发生时都会触发onFailure的回调。

110429_BAvL_165872.png

 

相关的reason有如下几种:

110429_Gphs_165872.png

110429_mnAj_165872.png

很遗憾,以上的监听接口同样为系统API级别的,而且所有的错误代码也是被隐藏的,我们无法调用。所以我们从源码角度来看看,是否有连接回调接口。

 

比如我们要新加一个网络步骤如下:

  1. addNetwork(WifiConfiguration config),没有回调入口110429_YAxq_165872.png
  2. boolean enableNetwork(int netId, boolean attemptConnect),没有回调入口110429_4WdO_165872.png
  3. boolean saveConfiguration(),没有回调入口110429_pDjr_165872.png
  4. boolean reconnect(),没有回调入口110429_cnUZ_165872.png

如上步骤,每一个步骤都没有添加回调的入口,我们只能通过每一步的结果来知道每一步的成功与否,如若失败我们并不能够知道其真实原因。

 

 

无线连接的状态以及结果反馈如下:

110429_dJiI_165872.png110429_wlKL_165872.png

 

110429_XObj_165872.png

110429_dKS7_165872.png

 

 

 

 

110429_bpYD_165872.png

 

有两种状态监控级别,大众化的、细粒度的,分别如下:

  1. 大众化的 110429_P7X1_165872.png
  2. 细粒度的 110429_3uqc_165872.png

如上所示,这种细粒度的貌似我们可以得到更多的信息,其中有认证中、分配IP地址、失败这些可能是我们比较感兴趣的。

 

接下来更精彩:

110429_7EdO_165872.png

这个函数貌似我们可以得到连接失败的原因,不过这个有待尝试。

 

 

总结:

经本次研究得出,如果是非系统级别的应用程序,是不能定制传入回调接口的。非系统级别的应用程序只能收到连接过程及连接结果反馈,当然也可以通过NetworkInfo该类中的getReason方法,获取某种特殊状态的原因,但是这个有待尝试。或许我了解的还不够深入,如有异议请及时反馈,谢谢。

转载于:https://my.oschina.net/u/165872/blog/995112

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值