1. 添加源文件和framework
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审(我们的)查的。
Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。要在应用程序程序中使用Reachability,首先要完成如下两部:
1.1. 添加源文件:
在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:
1.2.添加framework:
将SystemConfiguration.framework 添加进工程。如下图:
2. 网络状态
Reachability.h中定义了三种网络状态:
typedef
enum
{
NotReachable = 0,
//无连接
ReachableViaWiFi,
//使用3G/GPRS网络
ReachableViaWWAN
//使用WiFi网络
} NetworkStatus;
因此可以这样检查网络状态:
Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch
([r currentReachabilityStatus]) {
case
NotReachable:
// 没有网络连接
break
;
ReachableViaWWAN:
// 使用3G网络
ReachableViaWiFi:
// 使用WiFi网络
}
3.检查当前网络环境
程序启动时,如果想检测可用的网络环境,可以像这样
// 是否wifi
+ (
BOOL
) IsEnableWIFI {
return
([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
// 是否3G
) IsEnable3G {
([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
例子:
- (
void
)viewWillAppear:(
)animated {
if
(([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&
([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {
self
.navigationItem.hidesBackButton =
YES
[
.navigationItem setLeftBarButtonItem:
nil
animated:
NO
];
4. 链接状态的实时通知
网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户:
Reachability 1.5版本
// My.AppDelegate.h
#import "Reachability.h"
@interface
MyAppDelegate :
NSObject
<UIApplicationDelegate> {
NetworkStatus remoteHostStatus;
@property
@end
// My.AppDelegate.m
#import "MyAppDelegate.h"
@implementation
MyAppDelegate
@synthesize
remoteHostStatus;
// 更新网络状态
)updateStatus {
.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
// 通知网络状态
)reachabilityChanged:(
NSNotification
*)note {
updateStatus];
(
.remoteHostStatus == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:
NSLocalizedString
(@
"AppName"
,
)
message:
"NotReachable"
delegate:
cancelButtonTitle:@
"OK"
otherButtonTitles:
[alert show];
[alert release];
// 程序启动器,启动网络监视
)applicationDidFinishLaunching:(UIApplication *)application {
// 设置网络检测的站点
[[Reachability sharedReachability] setHostName:@
"www.apple.com"
[[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:
// 设置网络状态变化时的通知函数
[[
NSNotificationCenter
defaultCenter] addObserver:
selector:
@selector
(reachabilityChanged:)
name:@
"kNetworkReachabilityChangedNotification"
object:
)dealloc {
// 删除通知对象
defaultCenter] removeObserver:
[window release];
super
dealloc];
Reachability 2.0版本
// MyAppDelegate.h
@class
Reachability;
Reachability *hostReach;
// MyAppDelegate.m
Reachability* curReach = [note object];
NSParameterAssert
([curReach isKindOfClass: [Reachability
class
]]);
NetworkStatus status = [curReach currentReachabilityStatus];
(status == NotReachable) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@
"
message:@
"YES"
// ...
// 监测网络情况
name: kReachabilityChangedNotification
hostReach = [[Reachability reachabilityWithHostName:@
"www.google.com"
] retain];
hostReach startNotifer];