最近接入一个智能网关的 sdk,组网流程是这样的:
长按网关 reset 键进入初始化状态,手机连接任意一个 wifi,没外网也行,手动输入 wifi 密码,然后调用 sdk 的组网方法,网关竟然就自动接入 wifi 了??好像挺多智能设备都是这么一个操作,确实挺方便的。但按一般思维,我能想到的场景是先连接网关的热点,手机输入 wifi 信息,然后调用 sdk ( sdk 通过热点跟网关 tcp 通信之类),网关再关闭热点,连上输入的 wifi ?我开始认为可能是网关改写了 wifi 密码验证模块,网关创建一个隐藏 ssid,手机尝试连接该 ssid,将 wifi 数据放在密码里传过去。
然而 AndroidManifest.xml 里的权限只有这几项:INTERNET,ACCESS_WIFI_STATE,ACCESS_NETWORK_STATE,CHANGE_WIFI_MULTICAST_STATE,也就是说不可能有加入 wifi 的操作。看了一下 sdk 好像确实只发送了 wifi 多播数据,难不成 wifi 多播不需要连 wifi 也能接收数据?我写 demo 试了并不能啊。
那么问题来了,手机到底是怎么把 wifi 数据发送给网关的?智能网关和设备之间用 ZigBee 协议通信还能理解,不用蓝牙,不用 nfc,不用扫二维码,不用 wifi,甚至不用额外权限,手机还能发送数据?!一脸懵逼.jpg