我需要一个扫描并连接WiFi的Obj-C示例代码。私有API也可以,因为我不打算将应用程序发布到AppStore。 我在Cydia中找到了一个名为“WiFiFoFum”的应用程序,可以进行扫描和连接,但不幸的是我找不到该应用程序的源代码。 有人知道我可以在哪里找到那个代码吗? 谢谢。
我需要一个扫描并连接WiFi的Obj-C示例代码。私有API也可以,因为我不打算将应用程序发布到AppStore。 我在Cydia中找到了一个名为“WiFiFoFum”的应用程序,可以进行扫描和连接,但不幸的是我找不到该应用程序的源代码。 有人知道我可以在哪里找到那个代码吗? 谢谢。
这里找到了答案:http://code.google.com/p/iphone-wireless/issues/detail?id=20
在我的iPhone 4 v5.1.1上可以完美地使用。我能够扫描并连接到网络。 您可以在此处下载项目:https://github.com/devinshively/wifiAssociate
这是一个引用:
Apple80211Associate仍然有效(至少在3.1.2上有效)。在iPhone OS 2和3之间,框架的名称已更改,因此您应该按以下方式绑定函数:
void *airportHandle;
int (*Apple80211Open)(void *);
int (*Apple80211BindToInterface)(void *, NSString *);
int (*Apple80211Close)(void *);
int (*Apple80211Info)(void *, NSDictionary**);
int (*Apple80211Associate)(void *, NSDictionary*, void *);
int (*Apple80211Scan)(void *, NSArray **, void *);
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
Apple80211Open = dlsym(libHandle, "Apple80211Open");
Apple80211BindToInterface = dlsym(libHandle, "Apple80211BindToInterface");
Apple80211Scan = dlsym(libHandle, "Apple80211Scan");
Apple80211Close = dlsym(libHandle, "Apple80211Close");
Apple80211Info = dlsym(libHandle, "Apple80211GetInfoCopy");
Apple80211Associate = dlsym(libHandle, "Apple80211Associate");
void *airportHandle;
NSArray *keys = [NSArray arrayWithObjects:@"SCAN_RSSI_THRESHOLD", @"SSID_STR", nil];
NSArray *objects = [NSArray arrayWithObjects:[NSNumber numberWithInt:-100], ssid, nil];
NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSArray *found;
int openResult = Apple80211Open(&airportHandle);
NSLog(@"Openning wifi interface %@", (openResult == 0?@"succeeded":@"failed"));
int bindResult = Apple80211BindToInterface(airportHandle, @IF_NAME);
int scanResult = Apple80211Scan(airportHandle, &found, params);
NSDictionary *network;
// get the first network found
network = [found objectAtIndex:0];
int associateResult = Apple80211Associate(airportHandle, network,NULL);
Apple80211Close(airportHandle);
Objective-C是编译型语言,因此您不能像脚本语言那样获取程序的源代码。您可以检查“WiFiFoFum”是否是开源的,也许可以从作者的Github上下载源代码。否则,您可以查看/System/Library/PrivateFrameworks
目录中的私有框架,并使用class-dump-z将它们的头文件转储出来,就像这样:
$ class-dump-z -H <private framework>
当然不包括尖括号。
编辑:
刚刚检查了一下,看起来它不是开源的。