我目前正在使用以下内容检查我的应用程序是否可以使用Wi-Fi:
#import <SystemConfiguration/SystemConfiguration.h>
static inline BOOL addressReachable(const struct sockaddr_in *hostAddress);
BOOL localWiFiAvailable()
{
struct sockaddr_in localWifiAddress;
bzero(&localWifiAddress, sizeof(localWifiAddress));
localWifiAddress.sin_len = sizeof(localWifiAddress);
localWifiAddress.sin_family = AF_INET;
// IN_LINKLOCALNETNUM is defined in <netinet/in.h> as 169.254.0.0
localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM);
return addressReachable(&localWifiAddress);
}
static inline BOOL addressReachable(const struct sockaddr_in *hostAddress)
{
const SCNetworkReachabilityRef target =
SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault,
(const struct sockaddr *)hostAddress);
if (target != NULL)
{
SCNetworkReachabilityFlags flags = 0;
const BOOL reachable = SCNetworkReachabilityGetFlags(target, &flags);
CFRelease(target);
return reachable && (flags & kSCNetworkFlagsReachable);
} …
Run Code Online (Sandbox Code Playgroud) 有没有办法检测iPhone/iPad上是否启用了wifi?
我不想看看我是否可以上网,因为我使用了Reachability类.我只需要知道设备上是否启用了wifi.
感谢任何提示.
我在一些应用程序中看到,有一个警告说"打开Wi-Fi时位置准确性得到改善.转到设置打开wifi",然后有2个按钮,"取消"或"设置",在哪种情况下,它会将您重定向到设置页面.他们如何确定wifi是打开还是关闭?我不是要求可达性状态,因为互联网连接不是一个问题,我关心的是位置准确性,因为wifi提高了准确性,我想知道它是否打开,无论通过wifi连接互联网.提前致谢!
编辑:
在看到评论和答案之后,我想我需要强调一下:我不想找到是否通过WI-FI上网.想想在设置中打开wifi的情况,但手机没有连接到任何Wi-Fi网络.不同之处在于您启用了位置服务.打开wifi可以让你在室内更好地定位,gps卫星可能看不到(即使你没有连接到任何特定的wifi网络,哪里isReachableViaWiFi
会返回NO
,但实际上wifi已开启,我能够获得更准确的位置)
谢谢!
我想检查wifi是否关闭,然后向用户显示警报以检查其连接。
我找到了这样的代码,但是它检查是否有互联网连接,而不是检查wifi是否打开:
func isConnectionAvailble()->Bool{
var rechability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "www.apple.com").takeRetainedValue()
var flags : SCNetworkReachabilityFlags = 0
if SCNetworkReachabilityGetFlags(rechability, &flags) == 0
{
return false
}
let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
return (isReachable && !needsConnection)
}
Run Code Online (Sandbox Code Playgroud)