地下鉄に乗っている様な電波が入ったり、入らなかったりの状況にも対応出来る様に現在の電波が圏外になったときやまた入る様になったときに発生するイベントなどは取得できないのかなぁ?と思っていたところこちらのブログや
iPhoneアプリケーションで圏外を通知する。 - 24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/20090118/1232223329
こちらの公式のサンプルを紹介して貰いました。
Reachability
http://developer.apple.com/iphone/library/samplecode/Reachability/index.html
(2009/03/17 追記)
※コメント欄にてアドバイスを頂き、修正できました。
こちらを参考にプログラムを組んだところ、ボタンを押されたときやアプリ起動時に意図的に取得に行けば現在の状況を取得できる様にはなったのですが接続状況が切り替わったときに通知を受けるために以下の2つのメソッドを実行したのですが通知がまったく届きませんでした。
[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:@"kNetworkReachabilityChangedNotification" object:nil];
プログラムの書き方が悪いのかなぁ?と思ってサンプルの方も実行してみたのですがこちらも反応がありませんでした。
※コメント欄にて setNetworkStatusNotificationsEnabled:YES がコメントアウトされているが原因と教えて頂きました。コメントアウトを外したところ正しく通知される様になりました。
ちなみにテスト方法としては以下の手順を行いました。
1. Macbook Airで「インターネット共有」を設定。
2. iPhoneでそのWiFiに接続。
3. iPhoneアプリを起動。
4. 「インターネット共有」をOFFにする。
このテストの後、WiFiが切れてもまだ3Gでインターネットに接続できるので通知が発生しないのかなぁ?と思い「機内モード」に切り替えた上で同じテストを行ってみたのですがこちらも同様に通知が発生することがありませんでした。
こちらにソースを置いておきますのでもし、見てやっても良いゾという方がおられましたらアドバイス頂けるとうれしいです。よろしくお願いします<(_ _)>
※こちらのソースは修正済みのものへ差し替えてあります。