在iOS框架內,如何檢查Wifi收音機是否由用戶啓用?請注意,我對通過Wifi的可達性沒有興趣,但是如果用戶關閉了設備。謝謝。iPhone Wifi開啓還是關閉?
回答
正如@magma在評論中提到的那樣,您可能必須使用Reachability源代碼。 到目前爲止,根據我的經驗和其他人的談話,有沒有布爾可以告訴你,如果用戶已關閉設置中的Wi-Fi。通過檢查設備是否可以訪問互聯網,您只需要推斷並結束(假設)用戶已關閉Wi-Fi。
這是不幸的是,謝謝。 – x89a10
使用可達性是正確的方法。
您無法訪問應用程序中直接進入App Store的直接設置。 這被認爲是應用程序根本沒有理由處理的私人用戶區域。
但沒有更多的解釋我真的不需要找出設置。
這不是應用程序應該感興趣或擔心的事情。您有網絡訪問權限,或者您沒有網絡訪問權限。如果沒有可用的,那麼它的原因並不重要。
你不問一個像「你沒有福特?」這樣的問題嗎? 「你沒有寶馬?」。而是從一個好的應用程序設計中,你問「你有車嗎?」
另外Raechability與互聯網無關。它會告訴您設備是否通過TCP/IP網絡理論可達。這意味着一些網絡通信可用。然後你可以檢查什麼類型(例如Wifi與3G/LTE)。而這正是可達性的目的。
如果您出於某種原因想要關閉收音機,並且它適用於某種企業應用程序,那麼您可以查看私有框架,導入它們並處理其未記錄的方法隨任何更新而改變。
支持WiFi應該是:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework
當你說「沒有理由...在所有...」時,請小心,你的應用可能要有禮貌,只有在無線上傳時才上傳分析信息,並且不會佔用用戶的配額(並非世界上每個人都有無限的計劃)。您可能不希望通過單元網絡下載500 MB的可選遊戲數據,或者像Apple的AppStore應用程序,拒絕通過單元連接以特定大小下載應用程序。 – prewett
另一種您可能關心WiFi開啓或關閉(並且與外部實體無關)的情況是在多點對等連接環境中,其中打開WiFi開啓是可選的,但可以顯着改善用戶體驗。 –
想知道WiFi是否開啓或關閉的另一個原因是您正在監控地理區域。無線網絡打開時,進入/退出事件更加及時和準確。在小區域沒有wifi的情況下,該區域可能完全錯過,並且不會產生任何事件。在Wifi關閉的情況下,您可以選擇直接使用GPS來檢測該區域。 – BitByteDog
PrivateFrameworks不提供SDK也不是提供給任何企業開發。
如果我們知道你想要達到我對無線電廣播功率狀態的認識,我們可能會提出一種替代解決方案,但是從蘋果如何與他們向開發者公開的內容看,我不認爲這直接成爲可能。
使用可達性,你可以確定知道wifi是否打開,但知道wifi是否關閉拋硬幣。
基於:http://www.enigmaticape.com/blog/determine-wifi-enabled-ios-one-weird-trick
無線狀態可以被確定使用基於C的結構ifaddress從爲ON/OFF:
ifaddrs.h,和
淨/ if.h中
[編號原始碼:unknown。]
- (BOOL) isWiFiEnabled {
NSCountedSet * cset = [NSCountedSet new];
struct ifaddrs *interfaces;
if(! getifaddrs(&interfaces)) {
for(struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next) {
if ((interface->ifa_flags & IFF_UP) == IFF_UP) {
[cset addObject:[NSString stringWithUTF8String:interface->ifa_name]];
}
}
}
return [cset countForObject:@"awdl0"] > 1 ? YES : NO;
}
斯威夫特3版(需要與#include <ifaddrs.h>
橋接報頭):
func isWifiEnabled() -> Bool {
var addresses = [String]()
var ifaddr : UnsafeMutablePointer<ifaddrs>?
guard getifaddrs(&ifaddr) == 0 else { return false }
guard let firstAddr = ifaddr else { return false }
for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
addresses.append(String(cString: ptr.pointee.ifa_name))
}
freeifaddrs(ifaddr)
return addresses.contains("awdl0")
}
的iOS沒有公開的API,它告訴你,如果Wi-Fi開啓或關閉。
但是,您可以使用SystemConfiguration框架中提供的公共API CNCopyCurrentNetworkInfo()
來獲取有關當前Wi-Fi網絡的信息。 不是會告訴你Wi-Fi是打開還是關閉,而是設備連接到Wi-Fi網絡。也許這對你的目的已經足夠了。
另請注意,此API在模擬器中不起作用,因爲CNCopySupportedInterfaces()
始終返回NULL。
#include <SystemConfiguration/CaptiveNetwork.h>
BOOL hasWiFiNetwork = NO;
NSArray *interfaces = CFBridgingRelease(CNCopySupportedInterfaces());
for (NSString *interface in interfaces) {
NSDictionary *networkInfo = CFBridgingRelease(CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interface)));
if (networkInfo != NULL) {
hasWiFiNetwork = YES;
break;
}
}
雨燕2.3的版本
func isWifiEnabled() -> Bool {
var addresses = [String]()
var ifaddr : UnsafeMutablePointer<ifaddrs> = nil
guard getifaddrs(&ifaddr) == 0 else { return false }
var ptr = ifaddr
while ptr != nil { defer { ptr = ptr.memory.ifa_next }
addresses.append(String.fromCString(ptr.memory.ifa_name)!)
}
var counts:[String:Int] = [:]
for item in addresses {
counts[item] = (counts[item] ?? 0) + 1
}
freeifaddrs(ifaddr)
return counts["awdl0"] > 1 ? true : false
}
雨燕4.0版本
func isWifiEnabled() -> Bool {
var addresses = [String]()
var ifaddr : UnsafeMutablePointer<ifaddrs>?
guard getifaddrs(&ifaddr) == 0 else { return false }
guard let firstAddr = ifaddr else { return false }
for ptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
addresses.append(String(cString: ptr.pointee.ifa_name))
}
var counts:[String:Int] = [:]
for item in addresses {
counts[item] = (counts[item] ?? 0) + 1
}
freeifaddrs(ifaddr)
guard let count = counts["awdl0"] else { return false }
return count > 1
}
- 1. 開啓/關閉WiFi熱點編程
- 2. 打開/關閉WiFi
- 3. iphone檢查WIFI網絡開關打開/關閉
- 4. 關閉還是不關閉?
- 5. 如何在iphone中開啓/關閉UILocalNotification?
- 6. 我應該在生產環境中開啓還是關閉output_buffering?
- 7. 如何在Android中開發時查看屏幕是開啓還是關閉?
- 8. 打開/關閉iPhone的WiFi從應用程序
- 9. 開啓/關閉div
- 10. 如何使用PowerShell和Windows 10開啓/關閉WiFi狀態?
- 11. 開啓WiFi設置後關閉應用程序
- 12. 關閉Socket還是應該關閉流?
- 13. 它是關閉paren,關閉paren還是關閉paren?
- 14. iPhone - 我如何知道iOS的振動是打開還是關閉?
- 15. 如何檢查iOS Swift 2中的WiFi是否開啓或關閉?
- 16. 根據工作日,開閉時間顯示餐廳是開放還是關閉
- 17. Android:在關閉WiFi時關閉活動
- 18. 如何在unity3d中關閉wifi時關閉android wifi設置?
- 19. 開啓關閉GPS在ICS
- 20. 開啓/關閉setInterval動畫
- 21. 開啓關閉GPS的Android
- 22. 開啓或關閉3g
- 23. 如何開啓/關閉
- 24. Google Maps - 開啓/關閉Polygon
- 25. 開啓/關閉藍牙
- 26. jCarouselLite開啓/關閉按鈕
- 27. 如何檢查是否UDP端口是打開還是關閉
- 28. 是否知道遠程套接字是關閉還是斷開?
- 29. 開啓/關閉城市飛艇通知
- 30. 檢查sqlite安卓數據庫是打開還是關閉
你用戶特別的意思嗎? – Ravi
請參閱:http://stackoverflow.com/questions/1448411/how-to-check-for-local-wi-fi-not-just-cellular-connection-using-iphone-sdk – magma
Ravi和Magma,我有一個應用程序,並且我需要在代碼中檢查用戶是否關閉了Wifi設備,或者它是否保留。糾正我,如果我錯了,但從我的理解可達性給出的信息,你是否可以通過Wifi接口上網,而不是關於其開/關狀態。 – x89a10