1

ユーザーのデバイスが突然 Wi-Fi に接続されたときにディスパッチされる通知はありますか? それともこの性質の何か?

ユーザーがワイヤレスに接続するたびに、アプリのデリゲートで特定のセレクター/メソッドを実行する必要があります。セレクターを実行するタイミングを知るにはどうすればよいですか?

** 編集 **

必要に応じて、Reachabilityの IOS 5 ARC フレンドリー バージョンを見つけました。

4

1 に答える 1

2

ここから Reachability ヘッダーと実装を含める必要があります。

少し前に、特定の時間に WiFi に接続されているかどうかを確認する必要があるプロジェクトを行いました。あなたに役立つかもしれないいくつかのコードはここにあります:

- (BOOL) connectedToNetwork
{
    // Create zero addy
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    // Recover reachability flags
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);

    if (!didRetrieveFlags)
    {
        printf("Error. Could not recover network reachability flags\n");
        return 0;
    }

    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;
    return ((isReachable && !needsConnection) && !(nonWiFi)) ? YES : NO;
}

WiFi に接続されている場合は true を返します。

変更がいつ発生したかを検出する 1 つの方法は、NSTimerを実行し、結果が時間とともに変化するかどうかを確認することです。ただし、あまり頻繁に実行したくないでしょう。

于 2012-04-18T13:52:24.713 に答える