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

 

核心代码如下:

1. connect(WifiConfiguration config, ActionListener listener)
2. connect(int networkId, ActionListener listener)
3. save(WifiConfiguration config, ActionListener listener)

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

 

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

android获取wifi mac权限 android连接wifi代码_API

 

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

android获取wifi mac权限 android连接wifi代码_python_02

 

相关的reason有如下几种:

android获取wifi mac权限 android连接wifi代码_python_03

android获取wifi mac权限 android连接wifi代码_细粒度_04

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

 

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

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

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

 

 

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

android获取wifi mac权限 android连接wifi代码_移动开发_05

android获取wifi mac权限 android连接wifi代码_细粒度_06

 

android获取wifi mac权限 android连接wifi代码_python_07

android获取wifi mac权限 android连接wifi代码_细粒度_08

 

 

 

 

android获取wifi mac权限 android连接wifi代码_细粒度_09

 

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

  1. 大众化的 
  2. 细粒度的 

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

 

接下来更精彩:

android获取wifi mac权限 android连接wifi代码_python_10

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

 

 

总结:

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