在網(wǎng)上搜了好多例子,也問(wèn)了好多人,最終無(wú)果昭伸,特將自己找到的資源做分享本人做智能家居的APP,智能硬件設(shè)備自帶WiFi(局域網(wǎng))澎迎。如果用戶沒有連接設(shè)備的WiFi進(jìn)入APP時(shí)庐杨,需要提示用戶去設(shè)置界面連接WiFi。需求一夹供、APP內(nèi)部跳轉(zhuǎn)到系統(tǒng)WIFi 界面手動(dòng)連接實(shí)現(xiàn)info里面設(shè)置在項(xiàng)目中的info.plist中添加 URL types 并設(shè)置一項(xiàng)URL Schemes為prefs灵份,如下圖:wifi1實(shí)現(xiàn)代碼NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];if ([[UIApplication sharedApplication] canOpenURL:url]){? ? [[UIApplication sharedApplication] openURL:url];}需求二、在APP內(nèi)部做切換網(wǎng)絡(luò)iOS端WIFI應(yīng)用的相關(guān)開發(fā)哮洽,主要存在以下問(wèn)題:iOS系統(tǒng)WIFI相關(guān)的接口很少填渠,大部分接口都是私有接口在設(shè)備連接上WIFI,沒有通過(guò)路由器認(rèn)證前鸟辅,如果關(guān)閉iOS自動(dòng)彈出的Portal頁(yè)面氛什,iPhone的WIFI會(huì)自動(dòng)斷開如何禁止iOS系統(tǒng)自動(dòng)彈Portal頁(yè)面公共WIFI的名稱確定及不確定時(shí)的處理辦法獲取路由器Ip的方法1.添加getgateway.c文件,和route.h文件2.導(dǎo)入這些頭文件#import#include#import#import#import#import#include#import "getgateway.h"#import3.獲取網(wǎng)絡(luò)IP
//獲取路由器地址
-(NSString *)routerIp {
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0)
{
temp_addr = interfaces;
while(temp_addr != NULL)
{
if(temp_addr->ifa_addr->sa_family == AF_INET)
{
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
{
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
//廣播地址--10.22.70.255
NSLog(@"廣播地址--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)]);
//本機(jī)地址--10.22.70.111
NSLog(@"本機(jī)地址--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]);
//子網(wǎng)掩碼地址--255.255.255.0
NSLog(@"子網(wǎng)掩碼地址--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)]);
//端口地址--en0
NSLog(@"端口地址--%@",[NSString stringWithUTF8String:temp_addr->ifa_name]);
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
in_addr_t i =inet_addr([address cStringUsingEncoding:NSUTF8StringEncoding]);
in_addr_t* x =&i;
unsigned char *s=getdefaultgateway(x);
NSString *ip=[NSString stringWithFormat:@"%d.%d.%d.%d",s[0],s[1],s[2],s[3]];
//路由器地址-----10.22.70.1
NSLog(@"路由器地址-----%@",ip);
return ip;
}
4.獲取SSID
-(NSDictionary *)fetchNetInfo{
NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
NSDictionary *SSIDInfo;
for (NSString *interfaceName in interfaceNames) {
SSIDInfo = CFBridgingRelease(CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName));
BOOL isNotEmpty = (SSIDInfo.count > 0);
if (isNotEmpty) {
break;
}
}
return SSIDInfo;
}
注意:iOS 10以后對(duì)調(diào)用系統(tǒng)權(quán)限更高匪凉,WiFi那塊也做了新的協(xié)議
至此未完枪眉,有誰(shuí)知道如何在程序內(nèi)部連接指定熱點(diǎn)之后斷開連接在重新連接其他的網(wǎng)絡(luò)的,敬請(qǐng)告知