如何在 iOS 10 上以编程方式打开 Objective-C 中的 WIFI 设置

How to programmatically open the WIFI settings in Objective-C on iOS 10

以下代码在 iOS 9 上运行良好,请参阅 post。但它不适用于 iOS 10。如何在 iOS 10

上以编程方式打开 WIFI 设置
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];

完全相同的代码应该可以工作,但是对于 iOS 10,您需要通过将 "prefs" 添加到 URL 类型来做一些额外的工作:

选择目标后:

  • 导航到 "Info" 选项卡。
  • 滚动到底部后,您应该会看到 "URL Types" 部分。
  • 添加一个新的(通过单击加号按钮)并用 "prefs" 填充 "URL Schemes"。

应该是这样的:

现在,您的代码应该可以正常工作了。

更新:

如果它以某种方式没有按预期工作,您可能需要遵循此workaround

希望对您有所帮助。

试试这个:

    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]options:[NSDictionary dictionary] completionHandler:^(BOOL success) {
        }];
    }

谢谢:)

在iOS 10 中,需要一个新的url。尝试使用此代码来测试 urls :

NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
    NSURL* url = [NSURL URLWithString:urlString];
    if([[UIApplication sharedApplication] canOpenURL:url]){
        [[UIApplication sharedApplication] openURL:url];
        break;
    }
}

对于Swift:

let url = URL(string: "App-Prefs:root=WIFI")

    if UIApplication.shared.canOpenURL(url!){
        UIApplication.shared.openURL(url!)

    }

这在 iOS 10,

上工作正常

Go to Targets --> (Application) --> Info --> URL Types --> +

URL Schemes

prefs

看图,

然后添加如下代码,

-(void)openWifiSettings{
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"prefs:root=WIFI"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
    } else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:root=WIFI"]];
    }
}
 let url=URL(string: "App-Prefs:root=WIFI")
// you can change root as your requirements 
        if UIApplication.shared.canOpenURL(url!)
        {
            UIApplication.shared.open(url!, options: [:], completionHandler: {success in

            })

        }
        else{
            UIApplication.shared.open(url!, options: [:], completionHandler: {success in

            })
        }

Swift4.2,iOS12

使用较新版本的 iOS 不再可能进行这种深层链接。我的应用最近被拒绝使用:“非public URL 方案”,例如:prefs:root=。所以我想说不要浪费你的时间在我们目前不能做的事情上,只需打开设置即可。

这是我目前在我的应用程序中使用的功能:

extension UIApplication {

    ...

    @discardableResult
    static func openAppSetting() -> Bool {
        guard
            let settingsURL = URL(string: UIApplicationOpenSettingsURLString),
            UIApplication.shared.canOpenURL(settingsURL)
            else {
                return false
        }

        UIApplication.shared.open(settingsURL)
        return true
    }
}

用法:UIApplication.openAppSetting()