2011年2月8日火曜日

iPhone アプリ ネットワーク接続を検知する方法



iPhone アプリ上で、ネットワーク接続可能かどうかを検知する方法です。


1、Appleのデベロッパーサイトにある「Reachability」というライブラリをダウンロード


2、ダウンロードしたら、中にある下記のファイルを自分のプロジェクトへ追加する
• Reachability.m
• Reachability.h


3、Reachabilityの中で使用しているであろう、「SystemConfiguration.framework」を既存のFrameworkから追加だけする


4、検知したい所での.hファイル編集


#import "Reachability.h"
@class Reachability

これだけ追加


5、.mファイルの編集

// 自動検知するためにNotificationに登録する

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

// 指定したホストに接続確認する場合
Reachability *hostReach = [[Reachability reachabilityWithHostName: @"www.yahoo.co.jp"] retain];
    [hostReach startNotifier];
[self updateInterfaceWithReachability:hostReach];

// インターネットに接続できるか確認
    Reachability *internetReach = [[Reachability reachabilityForInternetConnection] retain];
    [internetReach startNotifier];
    [self updateInterfaceWithReachability: internetReach];

// Wifi接続かどうか確認
    Reachability *wifiReach = [[Reachability reachabilityForLocalWiFi] retain];
    [wifiReach startNotifier];
    [self updateInterfaceWithReachability: wifiReach];

単にネットワークに接続できるかどうかの確認であれば、

「reachabilityForInternetConnection」を使えばいいと思う。


検知した際に呼ばれるメソッドを追加
- (void) reachabilityChanged: (NSNotification* )note
{
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability:curReach];

}


接続可能かどうかで処理を分ける

- (void) updateInterfaceWithReachability: (Reachability*) curReach
{
NetworkStatus netStatus = [curReach currentReachabilityStatus];
if(netStatus == NotReachable) {
if(imageView == nil || self.tabBarController.selectedIndex == 0 ) {
UIImage *image = [UIImage imageNamed:@"no_denpa_bg.jpg"];
imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0,20, image.size.width,image.size.height);
[self.window addSubview:imageView];
}
}
else {
[imageView removeFromSuperview];
[self.window addSubview:tabBarController.view];
}
}

以上




0 件のコメント:

コメントを投稿