AppleのサンプルプログラムReachability(Version: 2.0)をダウンロード(Apple IDでログインする)して,自分のプロジェクトにReachability.hとReachability.mを追加する.忘れずにフレームワークにSystemConfigurationを追加する.
まず,自分のヘッダーファイル内で宣言する
#import <uikit/uikit.h>
@class Reachability;
@interface HowToUseReachabilityViewController : UIViewController
{
Reachability* hostReach; // ホスト接続
Reachability* internetReach; // 3Gネットワーク
Reachability* wifiReach; // Wi-Fi
}
@end
メソッドファイル内でReachabilityの設定と処理用メソッドを書く.設定は,viewDidLoad,viewWillAppearやネットワークを行う直前などで,書く.
#import "Reachability.h"
// Reachabilityの状態により,確認処理を行う
- (void) updateInterfaceWithReachability: (Reachability*) curReach
{
// 接続の状態を取得する.戻り値は,以下の3つ
// NotReachable
// ReachableViaWiFi
// ReachableViaWWAN
NetworkStatus status = [curReach currentReachabilityStatus];
// ホスト接続の場合
if(curReach == hostReach)
{
if( status == NotReachable ) NSLog(@"host failed");
}
// 3Gネットワーク接続の場合
if(curReach == internetReach)
{
if( status == NotReachable ) NSLog(@"3G failed");
}
// Wi-Fi接続の場合
if(curReach == wifiReach)
{
if( status == NotReachable ) NSLog(@"Wi-Fi failed");
}
- (void)viewDidLoad
{
[super viewDidLoad];
// ホスト(例えば,www.google.com)接続を調べる
hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
[self updateInterfaceWithReachability: hostReach];
// 3Gネットワーク接続を調べる
internetReach = [[Reachability reachabilityForInternetConnection] retain];
[self updateInterfaceWithReachability: internetReach];
// Wi-Fi接続を調べる
wifiReach = [[Reachability reachabilityForLocalWiFi] retain];
[self updateInterfaceWithReachability: wifiReach];
}
ここで,ネットワーク接続の状態が変わった場合でも検知したい場合は,状態変化を検出するように設定して,その変化時に処理を行うメソッドを定義する.
// ネットワーク接続の状態が変化したときに,呼ばれるメソッド
- (void) reachabilityChanged: (NSNotification* )note
{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability: curReach];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// ネットワーク接続を観測して変化したときに,呼ばれるメソッドを設定する
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
name: kReachabilityChangedNotification
object: nil];
// ホスト(例えば,www.google.com)接続を調べる
hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
[hostReach startNotifer];
}
これのサンプルソースです.プログでは見にくいので,興味ある人は直接プロジェクトを確認してください.使用条件は自己責任です.このサンプルをアプリに参考・組込する/した方は,得した分だけ隣人にジュースを奢ってあげてください.3G専用やWi-Fi専用アプリを作らない限り,hostReachだけを使えばネットワークを確認できまる.
追記
iOS5.0からのARCに対応させるにはReachability.m/hの一部を書き換える必要があります.ARCの知識を持っているか,プログラマの力量を確かめられる良い機会です.
0 コメント:
コメントを投稿