iOS-iPhone开发之判断当前的网络状态
2015-01-22 10:14
405 查看
第一种:
1、添加 framework:
将 SystemConfiguration.framework 添加进工程。
2、下载 http://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
复制里面的 Reachability.h 和 Reachability.m 到项目中
3、调用的代码:
-(NSString*) GetCurrntNet
{
NSString* result;
Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([r currentReachabilityStatus]) {
caseNotReachable: // 没有网络连接
result=nil;
break;
caseReachableViaWWAN: // 使用3G网络
result=@"3g";
break;
caseReachableViaWiFi: // 使用WiFi网络
result=@"wifi";
break;
}
return result;
}
以上代码在虚拟机中的模拟器上测试,有异常,难道测试网络联通不能使用模拟器?
另外,不管是不是插着网线,模拟器的WIFI始终是连着的,不管电脑本身的网络是否断开(同样是在虚拟机中)
+(BOOL) IsEnableWIFI { //始终返回YES
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
而3G/GPRS始终是断开的
+ (BOOL) IsEnable3G { //一直返回NO
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
第二种:
1、添加 framework:
将 SystemConfiguration.framework 添加进工程。
2.
if ([self
isNetworkEnabled])
{
//联网正常
}
else
{
//网络不正常
[ToolClass
showAlertInView:self.view
withText:@"亲,网络断了哦,请检查网络连接"];
}
3.
//-判断当前网络是否可用
-(BOOL) isNetworkEnabled
{
BOOL bEnabled = FALSE;
NSString *url =
@"www.baidu.com";
SCNetworkReachabilityRef ref =
SCNetworkReachabilityCreateWithName(NULL, [url
UTF8String]);
SCNetworkReachabilityFlags flags;
bEnabled =
SCNetworkReachabilityGetFlags(ref, &flags);
CFRelease(ref);
if (bEnabled) {
// kSCNetworkReachabilityFlagsReachable:能够连接网络
// kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
// kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接。
BOOL flagsReachable = ((flags &
kSCNetworkFlagsReachable) != 0);
BOOL connectionRequired = ((flags &
kSCNetworkFlagsConnectionRequired) != 0);
BOOL nonWiFi = flags &
kSCNetworkReachabilityFlagsTransientConnection;
bEnabled = ((flagsReachable && !connectionRequired) || nonWiFi) ?
YES : NO;
}
return bEnabled;
}
1、添加 framework:
将 SystemConfiguration.framework 添加进工程。
2、下载 http://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
复制里面的 Reachability.h 和 Reachability.m 到项目中
3、调用的代码:
-(NSString*) GetCurrntNet
{
NSString* result;
Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
switch ([r currentReachabilityStatus]) {
caseNotReachable: // 没有网络连接
result=nil;
break;
caseReachableViaWWAN: // 使用3G网络
result=@"3g";
break;
caseReachableViaWiFi: // 使用WiFi网络
result=@"wifi";
break;
}
return result;
}
以上代码在虚拟机中的模拟器上测试,有异常,难道测试网络联通不能使用模拟器?
另外,不管是不是插着网线,模拟器的WIFI始终是连着的,不管电脑本身的网络是否断开(同样是在虚拟机中)
+(BOOL) IsEnableWIFI { //始终返回YES
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
而3G/GPRS始终是断开的
+ (BOOL) IsEnable3G { //一直返回NO
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
第二种:
1、添加 framework:
将 SystemConfiguration.framework 添加进工程。
2.
if ([self
isNetworkEnabled])
{
//联网正常
}
else
{
//网络不正常
[ToolClass
showAlertInView:self.view
withText:@"亲,网络断了哦,请检查网络连接"];
}
3.
//-判断当前网络是否可用
-(BOOL) isNetworkEnabled
{
BOOL bEnabled = FALSE;
NSString *url =
@"www.baidu.com";
SCNetworkReachabilityRef ref =
SCNetworkReachabilityCreateWithName(NULL, [url
UTF8String]);
SCNetworkReachabilityFlags flags;
bEnabled =
SCNetworkReachabilityGetFlags(ref, &flags);
CFRelease(ref);
if (bEnabled) {
// kSCNetworkReachabilityFlagsReachable:能够连接网络
// kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
// kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接。
BOOL flagsReachable = ((flags &
kSCNetworkFlagsReachable) != 0);
BOOL connectionRequired = ((flags &
kSCNetworkFlagsConnectionRequired) != 0);
BOOL nonWiFi = flags &
kSCNetworkReachabilityFlagsTransientConnection;
bEnabled = ((flagsReachable && !connectionRequired) || nonWiFi) ?
YES : NO;
}
return bEnabled;
}
相关文章推荐
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- iPhone开发之判断当前的网络状态
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- iOS 开发判断监测当前网络状态
- 【ios开发】如何判断当前网络连接状态(网络是否正常)
- IOS中如何判断当前网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iOS开发之runtime的运用-获取当前网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- IOS中如何判断当前网络状态
- iphone 判断当前网络状态
- iOS开发之runtime的运用-获取当前网络状态
- 判断Iphone,Ipad当前网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- 判断Iphone,Ipad当前网络状态
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iPhone开发 判断当前的网络是3g还是wifi
- iOS开发之判断具体当前网络类型(2G网络还是3G网络)