最近接入一个智能网关的 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.