Android WifiManager如何连接到wpa_supplicant?

Android WifiManager如何连接到wpa_supplicant?

问题描述:

我想限制WiFi网络,用户可以通过Android(CyanogenMod的)选择。我的一个方法是过滤服务级别的网络。但是,我无法找到WifiManager如何绑定到wpa_supplicant。所以我的问题是:Android WifiManager如何连接到wpa_supplicant?

  1. Java Wifi-Stack如何与wpa_supplicant连接?
  2. 如何限制WiFi网络的Android平板电脑用户的任何其他的想法?

对问题1的回答通常会帮助我理解Android服务如何绑定到Linux服务。

UPDATE:

挖掘更多的进入了Android的代码,我发现真正的问题是:

  • 在哪里可以找到IWifiManager的实施?
  • 凡WifiManager实例化由系统?
+0

你是否努力使基于CyanogenMod的你自己的ROM? –

+0

是的,这是正确的大卫。 – Martin

Java Wifi-Stack如何与wpa_supplicant连接?

在“好老的Android时间”,在Java依赖于一些JNI的对局插座(文件描述符)的与之文本形式进行沟通与wpa_supplicant沟通。通过select()在des文件上书写/阅读。一旦你有一个wpa_supplicant运行(或hostapd),只要你配置了这些正确的,你有一个本地套接字,你可以选择/读/写命令,并从中获取结果

在这里看到关于它的一些解释:

https://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html

你可以用这个自己使用的wpa_clihostapd_cli程序在PC上,这些任务的实验:将命令发送到后台,得到异步响应等环/ rince /重复的WPA SUP”使用其-C = ctrl_interface parameter和了用于hostapd使用-g global control interface路径选项中,还是在相应的配置文件。你基本上得到的是一种与守护进程进行通信的shell,所以这一切都归结为创建命令字符串和解析字符串响应。你可能会发现这是在wifi-legacy或类似的东西从你的Android源代码树。

这是只是工作非常务实,简单的方法。

现在,实际真正的,长期的解决方案,正确的方式与内核通信的Wi-Fi mac80211/nl80211层是通过libnl。从我所看到的情况来看,谷歌现在使用的方式就是这样。 但是! B UT:它带有一个陡峭的学习曲线,因为要使用的库是非常可扩展/通用的,这意味着“做最基本的事情很复杂”,并且libnl带有很多API更改。如果你是谷歌,有没有问题,这是一个非常有价值的投资,我们将围绕这个没有得到永远无论如何,所以去了,我们到处都会使用它。使用libnl与802.11内核层进行通信,并围绕它建立一些更高级别的代码。

如果你是一个普通用户,欢迎几天(周?)进入libnl 802.11使用。

+0

感谢您的解释,jbm。然而,我更多地寻找对“WifiManager”抽象的解释与wpa_supplicant封装的具体实现有关。网络链路(libnl)不用于的wpa_supplicant和WifiManager,我猜,而是与内核堆栈无线上网通信之间的通信。 – Martin

要回答只是代码的位置问题,IWifiManager.Stub在WifiServiceImpl实现。在L之前,它在WifiService