空港が ap に接続しているときに、システムからの通知が必要です。フレームワークでそれを行う可能性はありますSystemConfiguration
か?systemconfigurations api ドキュメントを理解するのに問題があります。
2 に答える
SCNetworkReachability 機能セットを提供するSystemConfigurationネットワークで正しい軌道に乗っています。あなたは使用してみることができます
SCNetworkReachabilitySetCallback
到達可能性が変化したときに呼び出されるコールバックを設定します。と
SCNetworkReachabilityScheduleWithRunLoop
実行ループ内で到達可能性チェックをスケジュールする
または、SystemConfiguration フレームワークの上に構築された到達可能性フレームワーク(MacOS と iOS の両方) を使用して、物事をさらに簡単 (高レベル) にすることもできます。
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();
}
}
これには 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
このクラスの使用方法については、このスレッドを確認できます-