背景:公司有款产品内置wifi模块,需要ios端提供接口供前端uni-app去调用。主要功能分为开启wifi、关闭wifi、连接wifi。
重点:以下会涉及ios11以上的连接方法。(OC代码)
(1)ios11以下无连接指定的wifi的方法,只能考虑如何跳至wifi设置页面手动开启。
(2)ios11以上通过代码连接wifi后,暂无发现断开当前连接的wifi的方法,搜索了很多资料很少涉及ios断开wifi的方法,目前正在研究官方文档,以下只提供wifi连接方法。
1.ios11以上连接wifi的方法
(1)首先添加依赖库
(2) 配置一下权限
(3)新建一个.m文件,放置以下代码,运行
/// 导入类
#import
#import
//判断当前Wi-Fi是否开启
- (BOOL)isWiFiEnabled{
NSCountedSet * cset = [NSCountedSet new];
struct ifaddrs *interfaces;
if( ! getifaddrs(&interfaces) ) {
for( struct ifaddrs *interface = interfaces; interface; interface = interface->ifa_next)
{
if ( (interface->ifa_flags & IFF_UP) == IFF_UP ) {
[cset addObject:[NSString stringWithUTF8String:interface->ifa_name]];
}
}
}
//判断当前版本
if (@available(iOS 11.0, *)) {
NSLog(@"iOS 11以上版本");
//判断当前是否开启Wi-Fi
if([cset countForObject:@"awdl0"] > 1 ? YES : NO){
NSLog(@"true");
//使用network extension框架去连接wifi
return true;
}else{
//未开启wifi需要引导用户开启
NSLog(@"false");
return false;
}
} else {
NSLog(@"当前不支持 iOS 11以下版本");
return false;
}
}
//连接wifi类方法
+ (void)linkWiFi:(NSString*) a :(NSString*) b{
NSLog(@"linkWiFia:%@,linkWiFib:%@",a,b);
NEHotspotConfiguration *hotspotConfig = [[NEHotspotConfiguration alloc]initWithSSID:a passphrase:b isWEP:NO];
[[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) {
if (error && error.code != 13 && error.code != 7) {
NSLog(@"加入失败");
}else if(error.code ==7){
NSLog(@"已取消");
}else{
NSLog(@"已连接");
}
}];
}
注:调用以上方法出现下图d框是正常现象,因为要获取用户的授权才能连接目标wifi
小结:如果uni-app想调用ios的连接方法,可以参考uni-app调用OC代码块
续文:ios如果想实现断开当前wifi效果,可以查看一下官方-logoff方法
如果看完logoff方法会发现需要传参,参数是wifi列表里面的一个对象,如果想取得此对象又需要去官网各种申请,最后会发现想获得列表是需要去设置wifi页面刷新,兜了一圈,仅仅是想断开当前wifi而已,这样子处理的话没有太大意义了,所以这边采用的方案是前端d出提示框让用户点击跳转前往wifi设置页面手动断开wifi,前端调取gotoSettings方法即可
//跳转至系统设置wifi页面
- (void)gotoSettings {
NSString *urlString = @"App-Prefs:root=WIFI";
NSURL *url = [NSURL URLWithString:urlString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:url];
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)