Objective c 连接wifi时的通知(OS X)
当机场连接到ap时,我需要系统的通知。使用Objective c 连接wifi时的通知(OS X),objective-c,macos,wifi,Objective C,Macos,Wifi,当机场连接到ap时,我需要系统的通知。使用SystemConfiguration框架是否有可能做到这一点?我在理解systemconfigurations api文档时遇到问题。您使用SystemConfigurationNetwork的方法是正确的,它提供了一组功能。你可以尝试使用 SCNetworkReachabilitySetCallback 设置在可达性改变时调用的回调;及 SCNetworkReachabilityScheduleWithRunLoop 在运行循环中安排可达性检查
SystemConfiguration
框架是否有可能做到这一点?我在理解systemconfigurations api文档时遇到问题。您使用SystemConfigurationNetwork的方法是正确的,它提供了一组功能。你可以尝试使用
SCNetworkReachabilitySetCallback
设置在可达性改变时调用的回调;及
SCNetworkReachabilityScheduleWithRunLoop
在运行循环中安排可达性检查
或者,您可以尝试使用构建在SystemConfiguration框架之上的(适用于MacOS和iOS)来简化(更高级别)
如果您想采用系统配置方式,那么可以通过以下方式检查当前的可访问性并安装回调以通知更改():
这是回调的一个示例:
static void networkReachabilityCallback(SCNetworkReachabilityRef target,
SCNetworkConnectionFlags flags,
void *object) {
// Observed flags:
// - nearly gone: kSCNetworkFlagsReachable alone (ignored)
// - gone: kSCNetworkFlagsTransientConnection | kSCNetworkFlagsReachable | kSCNetworkFlagsConnectionRequired
// - connected: kSCNetworkFlagsIsDirect | kSCNetworkFlagsReachable
if (networkReachability == NULL)
return;
if ((flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired)) {
if (isReachable) // typically receive a reachable message ~20ms before the unreachable one
return;
isReachable = YES;
ncid_network_kill();
[NSThread detachNewThreadSelector:@selector(runThread:) toTarget:object withObject:nil];
} else {
isReachable = NO;
ncid_network_kill();
}
}
为此,您需要使用Apple的可达性类 您可以检查此线程以了解如何使用此类-
应该注意的是,OP询问的是OSX,而不是iOS,而Apple address iOS发布的线程和可达性类。@sergio-遗漏了这一点,将被删除。我使用了可达性框架,它对我很有效。非常感谢。
static void networkReachabilityCallback(SCNetworkReachabilityRef target,
SCNetworkConnectionFlags flags,
void *object) {
// Observed flags:
// - nearly gone: kSCNetworkFlagsReachable alone (ignored)
// - gone: kSCNetworkFlagsTransientConnection | kSCNetworkFlagsReachable | kSCNetworkFlagsConnectionRequired
// - connected: kSCNetworkFlagsIsDirect | kSCNetworkFlagsReachable
if (networkReachability == NULL)
return;
if ((flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired)) {
if (isReachable) // typically receive a reachable message ~20ms before the unreachable one
return;
isReachable = YES;
ncid_network_kill();
[NSThread detachNewThreadSelector:@selector(runThread:) toTarget:object withObject:nil];
} else {
isReachable = NO;
ncid_network_kill();
}
}