在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