【发布时间】:2011-01-19 12:50:04
【问题描述】:
我正在寻找一种在 iPhone 应用程序中显示可用 WiFi 的方法。 到目前为止,我的研究结果如下:
- 已从 AppStore 中删除了实现此类功能的应用程序(这意味着您无法通过 AppStore 部署该应用程序,这对我来说很好)
- Apple 将扫描所需的功能隐藏在私有框架中,您找不到任何关于“如何使用”的解释/cmets/示例
- http://code.google.com/p/iphone-wireless 似乎是最有希望的。无论如何,我不知道如何在我的代码中包含交付的源代码,以便它在设备上运行
即使提到 htt ://code.google.com/p/iphone-wireless/issues/detail?id=26 的改编也没有让我得到想要的结果。最大的进步是结束了
dlopen 错误:dlopen(/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto, 1):找不到图像 失败:__Apple80211Associate
在设备(iPhone 3GS;iOS 3.1.3)上启动应用程序后的消息。
产生错误的使用源代码在这里:
NSMutableDictionary *networks;
bool scanning;
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);
networks = [[NSMutableDictionary alloc] init];
// libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY);
// libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Preferences", RTLD_LAZY);
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
open(&airportHandle);
bind(airportHandle, @"en0");
NSLog(@"Scanning...");
scanning = true;
NSArray *scan_networks;
NSDictionary *parameters = [[NSDictionary alloc] init];
scan(airportHandle, &scan_networks, parameters);
bool changed;
for (int i = 0; i < [scan_networks count]; i++) {
if([networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] != nil
&& ![[networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] isEqualToDictionary:[scan_networks objectAtIndex: i]])
changed = true;
[networks setObject:[scan_networks objectAtIndex: i] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]];
}
if(changed) {
NSLog(@"NetworksUpdated");
}
scanning = false;
NSLog(@"Scan Finished...");
NSLog(@"Found %i networks: %@", [networks count], networks);
即使尝试其他注释行之一,它也不起作用: 程序收到 EXC_BAD_ACCESS 和几个
警告:check_safe_call:无法恢复当前帧
警告:无法恢复之前选择的帧。
我正在搜索的是如何在我的项目中包含 iphone-wireless 以及如何修改给定代码的提示? 另一种方法是提供有关如何在您的环境中扫描 WiFi 的提示。
如果有人能帮忙就好了。
【问题讨论】:
-
刚刚试了一下:虽然代码在运行时警告我;它打印出找到的 WiFi。一定有比这辆越野车更好的方法吗?至少可以正确打开和关闭对 WiFi 硬件的访问(这似乎不适用于上面的代码)0o
标签: objective-c iphone wifi network-scan