我有一个Debian服务器。此服务器应检查我的家庭wifi中是否有可用的iPhone。 问题是,如果移动数据可用,i-Devices会将wifi模块暂停到安全电源。所以一个解决方案就是,关闭移动数据并在wifi中发现工作正常。 (但这对我来说不是一个真正的解决方案,因为每次你在家时手动执行此操作都很烦人,其他人也会使用这个软件。)
目前使用iPad Mini和iPhone5(ios7)进行了测试:
我已经完成了android的任务,在Android中有一个广播,如果我的网络连接发生变化,所以我只需要以编程方式捕获广播并在我的Debianbox上注册我。 在iDevice上尝试过相同但似乎无法在后台拦截Objective-C中的Wifi-Status-Changes。在前景中它可以通过Apple-Reachability-Class实现。 但我在背景中需要它,所以这对我来说是不可能的。
扫描我的iPhone的所有端口并尝试执行请求,希望这能唤醒我的Wifi模块:
打开UDP端口:
打开TCP端口:
我尝试在端口5353 UDP(Bonjour / MDNS)上使用 netcat 发出请求。结果是iDevices在前30分钟内真正唤醒了wifi模块!在那段时间之后,如果请求唤醒wifi模块那么运气。我想大约30分钟后可能会有“深度睡眠”。
MacBookPro作为wifi热点和iDevices连接到此。然后我用Wireshark嗅探了整个流量,检查通过Wifi发送的消息。至少找到了由每个iOS7设备完成的MDNS多播。这个消息可以被一个小python服务器捕获。 - >可行,但设备发送多播的时间为1分钟至30多分钟,因此不稳定。
一种创造性的方式:静音推送通知唤醒iDevice,之后可以ping通wifi。所以推送通知只是唤醒我的无线网络! - >有效,但APN服务器不会告诉您推送消息是否已发送,因此它不是很稳固。我测试了这个,有时候APN服务器“吞下”了这条消息。每隔5分钟就会有一个互联网连接和移动数据流量,以检查我的设备是否处于无线网络状态......这不是最好的做法。但到目前为止,这是电池寿命的最佳解决方案。
触发您在家中使用地理围栏区域。这是可能的,并且有效,但它耗费了大量电池。但也许没有其他好的解决方案。
arp-scan是一个向ar-range发出arp-request的工具。如果打开移动数据,则此功能无效,否则无效。
所以我的问题:
谢谢
答案 0 :(得分:0)
问题是,如果移动数据可用,i-Devices会将wifi模块暂停到安全电源
我没有阅读你的整个问题所以如果你有错过的东西就应用了,但要避免设备在30分钟后暂停Wi-Fi,请将此密钥添加到info.plist
UIRequiresPersistentWiFi(布尔 - iOS)指定应用是否需要Wi-Fi连接。 iOS会在应用程序运行时保持活动的Wi-Fi连接处于打开状态。
答案 1 :(得分:0)
你尝试过Reachability吗? Apple有自己的框架可以使用。试试这个样本:https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html
希望这能回答你的问题。