11

私はこの質問に対する答えを探してSOを検索しましたが、少なくとも私がそれを機能させることができるまでには、実際には対処されていません。

私はもともと、以下を使用してインターネットの到達可能性のみをチェックしていました。

self.wwanReach = [Reachability reachabilityWithHostName:@"www.apple.com"];
[wwanReach startNotifer];

私は現在、ローカル WiFi 接続をサポートする必要があります (一般的にインターネットにアクセスできない場合+reachabilityForLocalWiFi) +reachabilityForInternetConnection。そこにハードコーディングする代わりに、これらを使用できると考えまし"www.apple.com"たが、残念ながら、次を使用すると:

self.wwanReach = [Reachability reachabilityForInternetConnection];
[wwanReach startNotifer];
self.wifiReach = [Reachability reachabilityForLocalWiFi];
[wifiReach startNotifer];

私が設定した到達可能性コールバックは、「never」の値が 10 分、12 分、15 分程度まで呼び出されます (これは私の忍耐力が続く限りでした。ユーザーの忍耐力ははるかに低くなります。 +reachabilityWithHostName: への切り替えは数秒で完了します.同時に進行中の 2 つの通知機能で問題が発生した場合に備えて、各「ペア」も個別に試しましたが、違いはありませんでした.

では、インターネット/WWAN またはローカル Wifi ネットワーク (いずれか、または両方) への到達可能性を判断する適切な方法は何ですか?

[この特定の使用例は、Mac mini コンピューター間ネットワークに接続する iPhone または iPad です。他の状況も当てはまると思います。]

4

4 に答える 4

21

この関数を使用して、wifi がオンになっているかどうかを確認します

- (BOOL)isWifiOn {
    Reachability* wifiReach = [Reachability reachabilityForLocalWiFi];

    NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
    return (netStatus==ReachableViaWiFi);
}

同様のコードを使用して reachabilityForInternetConnection を確認できますが、確認する必要があります

(netStatus==ReachableViaWiFi)

Wi-Fi経由であることを気にする場合 AND

(netStatus==ReachableViaWWAN)

あなたがそれがWWANを超えていることを気にするなら

于 2010-11-15T16:30:42.763 に答える
7

私は同じ問題に遭遇しました。最終的に私が見つけたのは、WWAN または WiFi の到達可能性について、通知コールバックはネットワークの変更がある場合にのみ呼び出されるということです。

つまり、到達可能性オブジェクトを作成した直後に、現在の到達可能性を確認します。通知は次のネットワーク変更が発生したときにのみ投稿されるため、通知を待たないでください。

インターネット/WWAN の場合:

self.wwanReach = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [wwanReach currentReachabilityStatus];
if (networkStatus == ReachableViaWWAN) {
    // do something
}

Wi-Fi の場合:

self.wifiReach = [Reachability reachabilityForLocalWiFi];
NetworkStatus networkStatus = [wifiReach currentReachabilityStatus];
if (networkStatus == ReachableViaWiFi) {
    // do something
}
于 2012-02-20T08:37:23.447 に答える
1

Apple の到達可能性の例は、通知の使用方法を示しています。これはイベント プッシュ モデルであり、効率的であるはずですが、通知が常に適切に機能しているとは限りません。発砲しないこともあれば、間違った情報を提供することもありました。そのため、2 秒の繰り返しタイマーでポーリングし、上記のstinkbutt で説明されているような手順で wifi をチェックすることになりました。これは、タイマーの実装に関する優れたリファレンスです

于 2011-09-30T02:06:59.110 に答える
0

これがあなたの問題かどうかはわかりませんが、startNotifier を呼び出すときに問題があることに気付きました。startNotifier 呼び出しをいくつかの UI コード、具体的には applicationDidFinishLaunching に移動するまで、通知を受信しないという同様の問題がありました (ただし、「決して」の値が短い - 私はそれほど忍耐強くないと思います)。

于 2010-12-08T19:41:24.470 に答える