3 ms·
The Zxing barcode scanner app does it this way: This [0] is the dispatch code. If it detects WIFI as type, it passes it to a WifiConfigManager [1] which then ta
by est31 6y ago
The Zxing barcode scanner app does it this way: This [0] is the dispatch code. If it detects WIFI as type, it passes it to a WifiConfigManager [1] which then talks to Android's WifiManager API. On the back end, the addOrUpdateNetwork function of WifiManager [3] calls the method with the same name of IWifiManager [4]. That class has a channel to a WifiStateMachine [5] which sends a message with the command CMD_ADD_OR_UPDATE_NETWORK. It's handled in the same file (but I suppose it's in a different process, now a privileged system process), and calls the addOrUpdateNetwork function of WifiConfigStore [6].
The WifiConfigStore stores its config into a wpa_supplicant compatible file. The file is then passed to the wpa_supplicant service, which is also present on other Linux distros like the GNU/Linux ones, although here the config file is built by a dedicated NetworkManager service (also, some intel folks are building a replacement IIRC). wpa_supplicant is a privileged service that talks to the WiFi card drivers.
[0]: https://github.com/zxing/zxing/blob/0cf3b9be71680f50c90a71ca26ce0d33664b0dd6/android/src/com/google/zxing/client/android/result/ResultHandlerFactory.java https://github.com/zxing/zxing/blob/0cf3b9be71680f50c90a71ca...
[1]: https://github.com/zxing/zxing/blob/0b9b39a74fb3d7b010fb2979c14666258d255789/android/src/com/google/zxing/client/android/wifi/WifiConfigManager.java https://github.com/zxing/zxing/blob/0b9b39a74fb3d7b010fb2979...
[2]: https://developer.android.com/reference/android/net/wifi/WifiManager https://developer.android.com/reference/android/net/wifi/Wif...
[3]: https://android.googlesource.com/platform/frameworks/base/+/50dd1eaaeb67a41d2b5355b532cdb8abce31eebc/wifi/java/android/net/wifi/WifiManager.java https://android.googlesource.com/platform/frameworks/base/+/...
[4]: https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/a15a2ee69156fa6fff09c0dd9b8182cb8fafde1c/service/java/com/android/server/wifi/WifiServiceImpl.java#829 https://android.googlesource.com/platform/frameworks/opt/net...
[5]: https://android.googlesource.com/platform/frameworks/base/+/a029ea1/wifi/java/android/net/wifi/WifiStateMachine.java#1407 https://android.googlesource.com/platform/frameworks/base/+/...
[6]: https://android.googlesource.com/platform/frameworks/opt/net/wifi/+/cd84f31168f7d3cac6d548aa295a479cc693b89b/service/java/com/android/server/wifi/WifiConfigStore.java#935 https://android.googlesource.com/platform/frameworks/opt/net...