iOS Wifi编程要点总结
2016-03-13 本文已影响1336人
蓝点工坊
一.Wifi热点取得
头文件
#import <SystemConfiguration/CaptiveNetwork.h>
引入框架
SystemConfiguration.framework
代码段
+(NSString *) currentWifiSSID
{
#if TARGET_OS_SIMULATOR
return @"(simulator)";
#else
NSArray *ifs = (__bridge id)CNCopySupportedInterfaces();
id info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) {
break;
}
}
NSDictionary *dctySSID = (NSDictionary *)info;
NSString *ssid = [dctySSID objectForKey:@"SSID"] ;
return ssid;
#endif
}
二.打开系统设置
早期版本能直接跳入某项具体设置,后来iOS取消这个功能,现在iOS8下能,直接跳入系统设置总入口.
+(void)openSystemSetting:(NSString *)settingName{
//iOS8 才有效
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0
#define SETTING_URL @"app-settings:"
#else
#define SETTING_URL UIApplicationOpenSettingsURLString
#endif
// NSLog(UIApplicationOpenSettingsURLString);
if (version >= 8.0){
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString:SETTING_URL]];
}
}
三.取得本机Wifi IP地址
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <ifaddrs.h>
#import <dlfcn.h>
+(NSString *) localWiFiIPAddress
{
BOOL success;
struct ifaddrs * addrs;
const struct ifaddrs * cursor;
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
// the second test keeps from picking up the loopback address
if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)
{
NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];
if ([name isEqualToString:@"en0"]) // Wi-Fi adapter
return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)];
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return nil;
}