2012年3月9日金曜日

WiFi接続チェック


Reachabilityサンプルを使用すると様々なネットワーク接続状態をチェックできます。とりあえずWiFiの接続状態だけチェックしたかったので、その部分についてだけ事例を紹介します。

サンプルコードのビルド
  1. ソースとダウンロードし、  Reachability.h、Reachability.mをプロジェクトに追加する。
  2. SystemConfiguration.framworkを追加する。
  3. ARC環境では、プロジェクトの設定でReachability.mにfno-objc-arcオプションを追加する。

    これを行わないと次のメッセージを含むエラーが発生する。
    Cast of C pointer type 'void *' to Objective-C pointer type 'NSObject *' requires
     a bridged cast
    'NSAutoreleasePool' is unavailable: not available in automatic reference counting mode
    'release' is unavailable: not available in automatic reference counting modeARC forbids explicit message send of 'release'
    Implicit conversion of Objective-C pointer type 'Reachability *' to C pointer type 'void *' requires a bridged cast
    ARC forbids explicit message send of 'autorelease'
アプリケーションデリゲートにロジックを追加する

Reachability *wifiReach;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
    wifiReach = [Reachability reachabilityForLocalWiFi];
    [wifiReach startNotifier];
    return YES;
}

- (BOOL)reachableViaWiFi
{
    NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
    return netStatus == ReachableViaWiFi;
}

以上でアプリケーションデリゲートのreachableViaWiFiメソッドでWiFi接続状態をチェックできるようになります。

WiFi接続状態はいつ変化するかわかりません。必要に応じてチェックします。また、このチェックがOKでも実際のアクセスに失敗する可能性もあります。

0 件のコメント: