我已经将可到达性导入到我的应用程序中,并且我对所有人都有一些操作方法问题。首先让我解释一下我的应用程序和其他工具。
该应用程序在同一时间与两件事进行通信,即ad-hoc网络和通过3G进行的Internet通信。注意:ad hoc网络未连接到Internet。这完美地工作-已经实现并进行了出色的测试。
话虽如此,我想实现可到达性以检测两件事。
1)用户是否已连接到wifi临时网络? (最好是,如果可能的话,是检测它是否以WXYZ前缀连接到wifi ad-hoc网络。例如,如果列出了两个网络,一个称为Linksys,另一个称为WXYZ-Testing_Platform,它知道是否连接到WXYZ)。
2)用户可以通过3G(或2G等)连接到Internet并访问我们的服务器吗?
提前致谢
编辑以包括对 future 观察者的答案:
对于1),我的代码如下:
.h
#import <SystemConfiguration/CaptiveNetwork.h> //for checking wifi network prefix
.m
- (BOOL) connectedToWifi
{
CFArrayRef myArray = CNCopySupportedInterfaces();
// Get the dictionary containing the captive network infomation
CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);
NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict;
NSString* ssid = [dict objectForKey:@"SSID"];
if ([ssid rangeOfString:@"WXYZ"].location == NSNotFound || ssid == NULL)
{
return false;
}
else
{
return true;
}
}
,对于2),我导入了可达性,并在每次连接到服务器时都使用此方法来使用它。注:将http://www.google.com替换为服务器信息
-(void) checkIfCanReachServer
{
UIAlertView *errorView;
Reachability *r = [Reachability reachabilityWithHostName:@"http://www.google.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
if(internetStatus == NotReachable) {
errorView = [[UIAlertView alloc]
initWithTitle: @"Network Error"
message: @"Cannot connect to the server."
delegate: self
cancelButtonTitle: @"OK" otherButtonTitles: nil];
[errorView show];
}
}
最佳答案
可达性仅使您知道设备是否可以成功地从发送数据包。所以
对于1),您应该引用iPhone get SSID without private library。对于2),您将仅使用可达性来检查Internet连接,然后需要使用NSURLConnection
或其他网络库来确保可以访问服务器。
关于iphone - 可达性帮助-WiFi检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7122722/