0
A
回答
2
您在SystemConfiguration網絡的正確軌道上,它提供SCNetworkReachability功能集。您可以嘗試使用
SCNetworkReachabilitySetCallback
設置回調,當可達性發生變化時將會調用回調;和
SCNetworkReachabilityScheduleWithRunLoop
調度運行循環
內的可達性檢查或者你可以嘗試使用reachability framework(無論是MacOS和iOS版),這是建立在SystemConfiguration框架之上,使事情變得更簡單(更高層次)。
如果你想要去的SystemConfiguration方式,這是你如何檢查當前可達性和安裝的回調通知的變化(source):
- (void)checkReachability {
NSString *server = [[NSUserDefaults standardUserDefaults] stringForKey:@"NCIDServer"];
if (server == nil) {
ncid_message_callback(self, [NSLocalizedString(@"No caller ID server was specified.", nil) UTF8String]);
return;
}
const char *serverName = [[[server componentsSeparatedByString:@":"] objectAtIndex:0] UTF8String];
SCNetworkReachabilityContext context = {0, (void *)self, NULL, NULL, NULL};
networkReachability = SCNetworkReachabilityCreateWithName(NULL, serverName);
if (networkReachability == NULL)
goto fail;
// If reachability information is available now, we don't get a callback later
SCNetworkConnectionFlags flags;
if (SCNetworkReachabilityGetFlags(networkReachability, &flags))
networkReachabilityCallback(networkReachability, flags, self);
if (!SCNetworkReachabilitySetCallback(networkReachability, networkReachabilityCallback, &context))
goto fail;
if (!SCNetworkReachabilityScheduleWithRunLoop(networkReachability, [[NSRunLoop currentRunLoop] getCFRunLoop], kCFRunLoopCommonModes))
goto fail;
return;
fail:
if (networkReachability != NULL)
CFRelease(networkReachability);
networkReachability = NULL; //-- ivar representing current reachability
}
這是回調的示例:
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();
}
}
0
您需要爲此使用Apple的Reachability類。 http://developer.apple.com/library/ios/#samplecode/Reachability/Listings/Classes_Reachability_m.html#//apple_ref/doc/uid/DTS40007324-Classes_Reachability_m-DontLinkElementID_6
您可以檢查此線程如何使用該接收機類
How do I receive notifications that the connection has changed type (3G, Edge, Wifi, GPRS)
相關問題
- 1. WiFi連接通知(CaptiveNetwork)
- 2. WiFi連接可用時通知
- 3. 每次通知wifi已斷開連接
- 4. 在後臺獲取Wifi連接通知
- 5. 每次通知wifi斷開連接
- 6. 在OS X中顯示與Swift的所有可用WIFI連接
- 7. 如何通知互聯網連接斷開,但WiFi仍連接
- 8. 通過Android的WiFi連接
- 9. 當wifi沒有連接時,APNS重新發送通知
- 10. 當通過WiFi下載數據時,如何知道我使用Wifi連接
- 11. 通過wifi連接亞行
- 12. 連接到通過WIFI
- 13. 如何知道您是否連接到Wifi Hotspot/Wifi/Wifi Direct
- 14. Android的 - 與文本連接的WiFi設備顯示通知
- 15. 通過wifi連接adb連接時遇到新的USB連接/分離
- 16. IOS通知包括SSID在內的WiFi連接
- 17. WIFI連接時獲取SSID?
- 18. Droid x無法同時調試並連接到SD卡(os x)
- 19. 無法連接到OS X上的mysql
- 20. 從OS X的Vagrant框連接到Oracle
- 21. 通過wifi通過編程連接iphone?
- 22. chrome.notification.create在OS不顯示通知X
- 23. 從OS X/Mac發送推送通知
- 24. 在OS X上顯示通知
- 25. OS X通知中心字體
- 26. OS X小牛在Chrome推送通知
- 27. OS X推送通知與解析
- 28. AVPlayer playerItemDidReachEnd:通知從不叫(OS X)
- 29. Mac OS X/RSS咆哮聲通知
- 30. 連接PC C++與通過WiFi直接
我使用的可達性框架,它爲我工作好。謝謝。 – dnlkng