怎样在ios上获取wifi的相关信息?

QQQ_Jinn 2012-10-19 12:45:06
rt 怎样获取设备的wifi信息,如信号强弱,热点名称等
...全文
14190 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbs1058010127 2014-12-20
  • 打赏
  • 举报
回复
求大神发一份demo给我,740491804@qq.com
lbs1058010127 2014-12-20
  • 打赏
  • 举报
回复
求大神发一份demo给我
qq_24422957 2014-12-11
  • 打赏
  • 举报
回复
专业技术型号人才啊
oyjy2012 2014-12-08
  • 打赏
  • 举报
回复
求大神发一份demo 给我,非常感谢。1475236272@qq.com
yhryyq 2014-09-22
  • 打赏
  • 举报
回复
引用 3 楼 KindAzrael 的回复:

在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:

#import <CoreFoundation/CoreFoundation.h> 
#import <Foundation/NSTimer.h> 
#import <Foundation/Foundation.h> 
#include <dlfcn.h> 
#include <ifaddrs.h> 
#include <arpa/inet.h> 
@interface MSNetworksManager : NSObject {

    NSMutableDictionary *networks; 
    NSArray *types; 
    int autoScanInterval; 
    bool scanning; 
    bool autoScanning; 
    void *libHandle; 
    void *airportHandle; 
    
    int (*open)(void *); 
    int (*bind)(void *, NSString *); 
    int (*close)(void *); 
    int (*associate)(void *, NSDictionary*, NSString*); 
    int (*scan)(void *, NSArray **, void *); 
    
    //int (*open)(void *); 
    //int (*bind)(void *, NSString *); 
    //int (*close)(void *); 
    //int (*scan)(void *, NSArray **, void *); 
    //int (*associate)(void*, NSDictionary *, NSString *); 
    int (*getpower)(void *, char *); 
    int (*setpower)(void*, char*); 
} 
+ (MSNetworksManager *)sharedNetworksManager; 
+ (NSNumber *)numberFromBSSID:(NSString *) bssid; 
- (NSMutableDictionary *)networks; 
- (NSDictionary *)networks:(int) type; 
- (NSDictionary *)network:(NSString *) aNetwork; 
- (id)init; 
- (void)dealloc; 
- (int)numberOfNetworks; 
- (int)numberOfNetworks:(int) type; 
- (int)autoScanInterval; 
- (void)scan; 
- (void)removeNetwork:(NSString *)aNetwork; 
- (void)removeAllNetworks; 
- (void)removeAllNetworks:(int) type; 
- (void)autoScan:(bool)scan; 
- (bool)autoScan; 
- (void)scanSelector:(id)param; 
- (void)setAutoScanInterval:(int) scanInterval; 
- (int)associateNetwork: (NSDictionary *)bss: (NSString *)password; 
- (int)getPower: (char *)power; 
- (int)setPower: (char *)power; 
- (NSString *) localIPAddress;

@end

 

 


.m文件:

#import "MSNetworksManager.h" 
static MSNetworksManager *NetworksManager;

@implementation MSNetworksManager 
+ (MSNetworksManager *)sharedNetworksManager 
{ 
    if (!NetworksManager) 
        NetworksManager = [[MSNetworksManager alloc] init]; 
    return NetworksManager; 
}

+ (NSNumber *)numberFromBSSID:(NSString *) bssid 
{ 
    int x = 0; 
    uint64_t longmac; 
    int MAC_LEN = 6; 
    short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN); 
    if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN) 
    { 
        for (x = 0; x < MAC_LEN; x++) 
            longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) * 8); 
    } else { 
        NSLog(@"WARN: invalid mac address! %@",self); 
    } 
    free(bs_in); 
    return [NSNumber numberWithUnsignedLongLong:longmac]; 
}

- (NSDictionary *)networks 
{ 
    // TODO: Implement joining of network types 
    return networks; 
} 
- (NSDictionary *)networks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return networks; 
}

- (NSDictionary *)network:(NSString *) aNetwork 
{ 
    return [networks objectForKey: aNetwork]; 
}

- (id)init 
{ 
    self = [super init]; 
    NetworksManager = self; 
    networks = [[NSMutableDictionary alloc] init]; 
    types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil]; 
    [types retain]; 
    autoScanInterval = 5; //seconds 
    // For iPhone 2.0 
    // libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY); 
    // For iPhone 3.0

    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"); 
    associate = dlsym(libHandle, "Apple80211Associate"); 
    getpower = dlsym(libHandle, "Apple80211GetPower"); 
    setpower = dlsym(libHandle, "Apple80211SetPower"); 
    
    open(&airportHandle); 
    bind(airportHandle, @"en0"); 
    
    return self; 
}

- (void)dealloc 
{ 
    close(&airportHandle); 
    [super dealloc]; 
}

- (int)numberOfNetworks 
{ 
    return [networks count]; 
} 
- (int)numberOfNetworks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return [networks count]; 
}

- (int)autoScanInterval 
{ 
    return autoScanInterval; 
}

- (void)scan 
{ 
//    NSLog(@"Scanning…"); 
    scanning = true; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self]; 
    NSArray *scan_networks; 
    NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
    [parameters setObject:@"YES" forKey:@"SCAN_MERGE"]; 
    scan(airportHandle, &scan_networks, parameters); 
    int i; 
    //bool changed; 
    [networks removeAllObjects]; 
    for (i = 0; i < [scan_networks count]; i++) { 
                [networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]];     
    } 
   NSLog(@"Scan Finished…"); 
}

- (void)removeNetwork:(NSString *)aNetwork 
{ 
    [networks removeObjectForKey:aNetwork]; 
}

- (void)removeAllNetworks 
{ 
    [networks removeAllObjects]; 
}

- (void)removeAllNetworks:(int) type 
{ 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    [networks removeAllObjects]; 
}

- (void)autoScan:(bool) bScan 
{ 
    autoScanning = bScan; 
    if(bScan) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
    NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self); 
}

- (bool)autoScan 
{ 
    return autoScanning; 
}

- (void)scanSelector:(id)param { 
    if(autoScanning) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
}

- (void)setAutoScanInterval:(int) scanInterval 
{ 
    autoScanInterval = scanInterval; 
}

- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password 
{ 
    if(bss!=nil) { 
        NSLog(@"associateNetwork"); 
        int ret = associate(airportHandle, bss, password); 
        return ret; 
    }else 
        return -1; 
}

- (int)getPower: (char *)power 
{ 
    return getpower(airportHandle, power); 
}

- (int)setPower: (char *)power 
{ 
    return setpower(airportHandle, power); 
}

- (NSString *) localIPAddress 
{ 
    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 
    
    // retrieve the current interfaces – returns 0 on success 
    success = getifaddrs(&interfaces); 
    if (success == 0) 
    { 
        // Loop through linked list of interfaces 
        temp_addr = interfaces; 
        while(temp_addr != NULL) 
        { 
            if(temp_addr->ifa_addr->sa_family == AF_INET) 
            { 
                // Check if interface is en0 which is the wifi connection on the iPhone 
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
                { 
                    // Get NSString from C String 
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
                } 
            } 
            
            temp_addr = temp_addr->ifa_next; 
        } 
    } 
    
    // Free memory 
    freeifaddrs(interfaces); 
    return address; 
}

@end

 

添加到项目中即可。
mark 少见的好东西
_sys_ 2014-09-13
  • 打赏
  • 举报
回复
求个demo,谢谢谢谢。735003861@qq.com
qq_15334421 2014-07-29
  • 打赏
  • 举报
回复
楼主,最近也在做这个,能发一份Demo给我吗,谢谢! 543319861@qq.com
wakeup_qin 2014-07-23
  • 打赏
  • 举报
回复
楼主,能发一份demo给我吗,谢谢谢谢! 372534741@qq.com
米迦勒灬情殇 2014-07-08
  • 打赏
  • 举报
回复
楼主,求demo,我刚好工作上在做这个,谢谢谢谢! 397926845@qq.com
  • 打赏
  • 举报
回复
引用 19 楼 lichen1990 的回复:
很好,不错[quote=引用 3 楼 KindAzrael 的回复:]

在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:

#import <CoreFoundation/CoreFoundation.h> 
#import <Foundation/NSTimer.h> 
#import <Foundation/Foundation.h> 
#include <dlfcn.h> 
#include <ifaddrs.h> 
#include <arpa/inet.h> 
@interface MSNetworksManager : NSObject {

    NSMutableDictionary *networks; 
    NSArray *types; 
    int autoScanInterval; 
    bool scanning; 
    bool autoScanning; 
    void *libHandle; 
    void *airportHandle; 
    
    int (*open)(void *); 
    int (*bind)(void *, NSString *); 
    int (*close)(void *); 
    int (*associate)(void *, NSDictionary*, NSString*); 
    int (*scan)(void *, NSArray **, void *); 
    
    //int (*open)(void *); 
    //int (*bind)(void *, NSString *); 
    //int (*close)(void *); 
    //int (*scan)(void *, NSArray **, void *); 
    //int (*associate)(void*, NSDictionary *, NSString *); 
    int (*getpower)(void *, char *); 
    int (*setpower)(void*, char*); 
} 
+ (MSNetworksManager *)sharedNetworksManager; 
+ (NSNumber *)numberFromBSSID:(NSString *) bssid; 
- (NSMutableDictionary *)networks; 
- (NSDictionary *)networks:(int) type; 
- (NSDictionary *)network:(NSString *) aNetwork; 
- (id)init; 
- (void)dealloc; 
- (int)numberOfNetworks; 
- (int)numberOfNetworks:(int) type; 
- (int)autoScanInterval; 
- (void)scan; 
- (void)removeNetwork:(NSString *)aNetwork; 
- (void)removeAllNetworks; 
- (void)removeAllNetworks:(int) type; 
- (void)autoScan:(bool)scan; 
- (bool)autoScan; 
- (void)scanSelector:(id)param; 
- (void)setAutoScanInterval:(int) scanInterval; 
- (int)associateNetwork: (NSDictionary *)bss: (NSString *)password; 
- (int)getPower: (char *)power; 
- (int)setPower: (char *)power; 
- (NSString *) localIPAddress;

@end

 

 


.m文件:

#import "MSNetworksManager.h" 
static MSNetworksManager *NetworksManager;

@implementation MSNetworksManager 
+ (MSNetworksManager *)sharedNetworksManager 
{ 
    if (!NetworksManager) 
        NetworksManager = [[MSNetworksManager alloc] init]; 
    return NetworksManager; 
}

+ (NSNumber *)numberFromBSSID:(NSString *) bssid 
{ 
    int x = 0; 
    uint64_t longmac; 
    int MAC_LEN = 6; 
    short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN); 
    if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN) 
    { 
        for (x = 0; x < MAC_LEN; x++) 
            longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) * 8); 
    } else { 
        NSLog(@"WARN: invalid mac address! %@",self); 
    } 
    free(bs_in); 
    return [NSNumber numberWithUnsignedLongLong:longmac]; 
}

- (NSDictionary *)networks 
{ 
    // TODO: Implement joining of network types 
    return networks; 
} 
- (NSDictionary *)networks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return networks; 
}

- (NSDictionary *)network:(NSString *) aNetwork 
{ 
    return [networks objectForKey: aNetwork]; 
}

- (id)init 
{ 
    self = [super init]; 
    NetworksManager = self; 
    networks = [[NSMutableDictionary alloc] init]; 
    types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil]; 
    [types retain]; 
    autoScanInterval = 5; //seconds 
    // For iPhone 2.0 
    // libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY); 
    // For iPhone 3.0

    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"); 
    associate = dlsym(libHandle, "Apple80211Associate"); 
    getpower = dlsym(libHandle, "Apple80211GetPower"); 
    setpower = dlsym(libHandle, "Apple80211SetPower"); 
    
    open(&airportHandle); 
    bind(airportHandle, @"en0"); 
    
    return self; 
}

- (void)dealloc 
{ 
    close(&airportHandle); 
    [super dealloc]; 
}

- (int)numberOfNetworks 
{ 
    return [networks count]; 
} 
- (int)numberOfNetworks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return [networks count]; 
}

- (int)autoScanInterval 
{ 
    return autoScanInterval; 
}

- (void)scan 
{ 
//    NSLog(@"Scanning…"); 
    scanning = true; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self]; 
    NSArray *scan_networks; 
    NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
    [parameters setObject:@"YES" forKey:@"SCAN_MERGE"]; 
    scan(airportHandle, &scan_networks, parameters); 
    int i; 
    //bool changed; 
    [networks removeAllObjects]; 
    for (i = 0; i < [scan_networks count]; i++) { 
                [networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]];     
    } 
   NSLog(@"Scan Finished…"); 
}

- (void)removeNetwork:(NSString *)aNetwork 
{ 
    [networks removeObjectForKey:aNetwork]; 
}

- (void)removeAllNetworks 
{ 
    [networks removeAllObjects]; 
}

- (void)removeAllNetworks:(int) type 
{ 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    [networks removeAllObjects]; 
}

- (void)autoScan:(bool) bScan 
{ 
    autoScanning = bScan; 
    if(bScan) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
    NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self); 
}

- (bool)autoScan 
{ 
    return autoScanning; 
}

- (void)scanSelector:(id)param { 
    if(autoScanning) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
}

- (void)setAutoScanInterval:(int) scanInterval 
{ 
    autoScanInterval = scanInterval; 
}

- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password 
{ 
    if(bss!=nil) { 
        NSLog(@"associateNetwork"); 
        int ret = associate(airportHandle, bss, password); 
        return ret; 
    }else 
        return -1; 
}

- (int)getPower: (char *)power 
{ 
    return getpower(airportHandle, power); 
}

- (int)setPower: (char *)power 
{ 
    return setpower(airportHandle, power); 
}

- (NSString *) localIPAddress 
{ 
    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 
    
    // retrieve the current interfaces – returns 0 on success 
    success = getifaddrs(&interfaces); 
    if (success == 0) 
    { 
        // Loop through linked list of interfaces 
        temp_addr = interfaces; 
        while(temp_addr != NULL) 
        { 
            if(temp_addr->ifa_addr->sa_family == AF_INET) 
            { 
                // Check if interface is en0 which is the wifi connection on the iPhone 
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
                { 
                    // Get NSString from C String 
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
                } 
            } 
            
            temp_addr = temp_addr->ifa_next; 
        } 
    } 
    
    // Free memory 
    freeifaddrs(interfaces); 
    return address; 
}

@end

 

添加到项目中即可。
[/quote] mark..........
深行远科技 2014-06-13
  • 打赏
  • 举报
回复
google上又现成的demo svn下就 ok 了 ,Google下IOS scan wifi 就出来了。
  • 打赏
  • 举报
回复
求demo 啊 谢谢群主 158954945@qq.com
woaick1 2014-05-16
  • 打赏
  • 举报
回复
楼至能发一份demo嘛,非常感谢,困扰了我好久了5250871352QQ.COM
五锅锅 2014-05-08
  • 打赏
  • 举报
回复
yyp33 2014-05-06
  • 打赏
  • 举报
回复
楼主能发一份demo吗,我的QQ:794293516@qq.com
sharmi 2014-05-02
  • 打赏
  • 举报
回复
好东西。。学习下。。。
梅大慢呦 2014-04-18
  • 打赏
  • 举报
回复
运行不了 请问下有demo没 麻烦发给我一份 451257313@qq.com
ChineLee 2014-03-19
  • 打赏
  • 举报
回复
很好,不错
引用 3 楼 KindAzrael 的回复:

在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:

#import <CoreFoundation/CoreFoundation.h> 
#import <Foundation/NSTimer.h> 
#import <Foundation/Foundation.h> 
#include <dlfcn.h> 
#include <ifaddrs.h> 
#include <arpa/inet.h> 
@interface MSNetworksManager : NSObject {

    NSMutableDictionary *networks; 
    NSArray *types; 
    int autoScanInterval; 
    bool scanning; 
    bool autoScanning; 
    void *libHandle; 
    void *airportHandle; 
    
    int (*open)(void *); 
    int (*bind)(void *, NSString *); 
    int (*close)(void *); 
    int (*associate)(void *, NSDictionary*, NSString*); 
    int (*scan)(void *, NSArray **, void *); 
    
    //int (*open)(void *); 
    //int (*bind)(void *, NSString *); 
    //int (*close)(void *); 
    //int (*scan)(void *, NSArray **, void *); 
    //int (*associate)(void*, NSDictionary *, NSString *); 
    int (*getpower)(void *, char *); 
    int (*setpower)(void*, char*); 
} 
+ (MSNetworksManager *)sharedNetworksManager; 
+ (NSNumber *)numberFromBSSID:(NSString *) bssid; 
- (NSMutableDictionary *)networks; 
- (NSDictionary *)networks:(int) type; 
- (NSDictionary *)network:(NSString *) aNetwork; 
- (id)init; 
- (void)dealloc; 
- (int)numberOfNetworks; 
- (int)numberOfNetworks:(int) type; 
- (int)autoScanInterval; 
- (void)scan; 
- (void)removeNetwork:(NSString *)aNetwork; 
- (void)removeAllNetworks; 
- (void)removeAllNetworks:(int) type; 
- (void)autoScan:(bool)scan; 
- (bool)autoScan; 
- (void)scanSelector:(id)param; 
- (void)setAutoScanInterval:(int) scanInterval; 
- (int)associateNetwork: (NSDictionary *)bss: (NSString *)password; 
- (int)getPower: (char *)power; 
- (int)setPower: (char *)power; 
- (NSString *) localIPAddress;

@end

 

 


.m文件:

#import "MSNetworksManager.h" 
static MSNetworksManager *NetworksManager;

@implementation MSNetworksManager 
+ (MSNetworksManager *)sharedNetworksManager 
{ 
    if (!NetworksManager) 
        NetworksManager = [[MSNetworksManager alloc] init]; 
    return NetworksManager; 
}

+ (NSNumber *)numberFromBSSID:(NSString *) bssid 
{ 
    int x = 0; 
    uint64_t longmac; 
    int MAC_LEN = 6; 
    short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN); 
    if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN) 
    { 
        for (x = 0; x < MAC_LEN; x++) 
            longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) * 8); 
    } else { 
        NSLog(@"WARN: invalid mac address! %@",self); 
    } 
    free(bs_in); 
    return [NSNumber numberWithUnsignedLongLong:longmac]; 
}

- (NSDictionary *)networks 
{ 
    // TODO: Implement joining of network types 
    return networks; 
} 
- (NSDictionary *)networks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return networks; 
}

- (NSDictionary *)network:(NSString *) aNetwork 
{ 
    return [networks objectForKey: aNetwork]; 
}

- (id)init 
{ 
    self = [super init]; 
    NetworksManager = self; 
    networks = [[NSMutableDictionary alloc] init]; 
    types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil]; 
    [types retain]; 
    autoScanInterval = 5; //seconds 
    // For iPhone 2.0 
    // libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY); 
    // For iPhone 3.0

    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"); 
    associate = dlsym(libHandle, "Apple80211Associate"); 
    getpower = dlsym(libHandle, "Apple80211GetPower"); 
    setpower = dlsym(libHandle, "Apple80211SetPower"); 
    
    open(&airportHandle); 
    bind(airportHandle, @"en0"); 
    
    return self; 
}

- (void)dealloc 
{ 
    close(&airportHandle); 
    [super dealloc]; 
}

- (int)numberOfNetworks 
{ 
    return [networks count]; 
} 
- (int)numberOfNetworks:(int) type 
{ 
    // TODO: Implement selecting of network types 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    return [networks count]; 
}

- (int)autoScanInterval 
{ 
    return autoScanInterval; 
}

- (void)scan 
{ 
//    NSLog(@"Scanning…"); 
    scanning = true; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self]; 
    NSArray *scan_networks; 
    NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
    [parameters setObject:@"YES" forKey:@"SCAN_MERGE"]; 
    scan(airportHandle, &scan_networks, parameters); 
    int i; 
    //bool changed; 
    [networks removeAllObjects]; 
    for (i = 0; i < [scan_networks count]; i++) { 
                [networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]];     
    } 
   NSLog(@"Scan Finished…"); 
}

- (void)removeNetwork:(NSString *)aNetwork 
{ 
    [networks removeObjectForKey:aNetwork]; 
}

- (void)removeAllNetworks 
{ 
    [networks removeAllObjects]; 
}

- (void)removeAllNetworks:(int) type 
{ 
    if(type != 0) 
        NSLog(@"WARN: Non 80211 networks are not supported. %@",self); 
    [networks removeAllObjects]; 
}

- (void)autoScan:(bool) bScan 
{ 
    autoScanning = bScan; 
    if(bScan) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
    NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self); 
}

- (bool)autoScan 
{ 
    return autoScanning; 
}

- (void)scanSelector:(id)param { 
    if(autoScanning) { 
        [self scan]; 
        [NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO]; 
    } 
}

- (void)setAutoScanInterval:(int) scanInterval 
{ 
    autoScanInterval = scanInterval; 
}

- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password 
{ 
    if(bss!=nil) { 
        NSLog(@"associateNetwork"); 
        int ret = associate(airportHandle, bss, password); 
        return ret; 
    }else 
        return -1; 
}

- (int)getPower: (char *)power 
{ 
    return getpower(airportHandle, power); 
}

- (int)setPower: (char *)power 
{ 
    return setpower(airportHandle, power); 
}

- (NSString *) localIPAddress 
{ 
    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 
    
    // retrieve the current interfaces – returns 0 on success 
    success = getifaddrs(&interfaces); 
    if (success == 0) 
    { 
        // Loop through linked list of interfaces 
        temp_addr = interfaces; 
        while(temp_addr != NULL) 
        { 
            if(temp_addr->ifa_addr->sa_family == AF_INET) 
            { 
                // Check if interface is en0 which is the wifi connection on the iPhone 
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
                { 
                    // Get NSString from C String 
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
                } 
            } 
            
            temp_addr = temp_addr->ifa_next; 
        } 
    } 
    
    // Free memory 
    freeifaddrs(interfaces); 
    return address; 
}

@end

 

添加到项目中即可。
愤怒的刚哥 2014-03-13
  • 打赏
  • 举报
回复
这是调用的私有API么 能上线么 谁能给我发一份 不胜感激 253491874@qq.com
shixuehuiab 2014-02-12
  • 打赏
  • 举报
回复
libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);// iOS 5 之后的用 参考这里: http://blog.csdn.net/robincui2011/article/details/8853401 我验证过,iOS5和iOS7上可以,iOS6估计也没问题
加载更多回复(15)

29,043

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧