Bạn có thể muốn sử dụng khung công tác riêng của Apple80211 bằng cách sử dụng thư viện dlfcn.h. Một ví dụ iphone có thể được tìm thấy ở đây:
http://www.csse.uwa.edu.au/~chris/iphone/APlogger/
Tải file nguồn và điều tra mô-đun máy quét.
Nói tóm lại, bạn sẽ đưa ra một cái gì đó như thế này:
#define IF_NAME "en0"
#include <dlfcn.h>
- (void)performScan
{
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);
void *libHandle;
void *airportHandle;
libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
scan = dlsym(libHandle, "Apple80211Scan");
close = dlsym(libHandle, "Apple80211Close");
open(&airportHandle);
bind(airportHandle, @IF_NAME);
NSArray *found;
NSDictionary *params = [[NSDictionary alloc] init];
scan(airportHandle, &found, params);
int nnw = [found count];
for(int i=0 ; i < nnw ; i++) {
NSDictionary *nw = [found objectAtIndex:i];
NSString *ssid = [self fixSSID:nw];
// RSSI indicates signal strength
int rssi = [[nw objectForKey:@"RSSI"] intValue];
}
// Cleanup
close(airportHandle);
dlclose(libHandle);
}
-(NSString *)fixSSID:(NSDictionary *)nw
{
if ([[nw objectForKey:@"HIDDEN_NETWORK"] boolValue])
return @"<hidden>";
else
return [nw objectForKey:@"SSID_STR"];
}
Lưu ý rằng nếu bạn sử dụng khuôn khổ riêng trong iOS ứng dụng, bạn sẽ không thể xuất bản chúng trên App Store (Apple sẽ từ chối ứng dụng của bạn vì không có tài liệu công khai cho khung công tác Apple80211). nhưng vì câu hỏi của bạn liên quan đến phát triển OSX, điều này không áp dụng cho trường hợp của bạn.
Hy vọng điều đó sẽ hữu ích.
Farzan Doroodgar
Bạn có may mắn không? –
Thật không may, tôi đã không. Bạn có bất cứ ý tưởng? –
Bạn có thể thử sử dụng thuộc tính rssi trên đối tượng CWInterface. Nó cho thấy "phép đo chỉ báo cường độ tín hiệu (RSSI) tổng hợp hiện tại (dBm) cho giao diện.". Nó hoạt động trong môi trường sandbox. –