如何在iOS9中以编程方式打开目标c中的WIFI设置

时间:2015-10-30 14:00:54

标签: objective-c iphone ios9

我正在尝试使用Objective-C通过我的应用程序访问WIFI设置。但找不到任何办法。有人能帮助我吗?

已经测试过:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];

在iOS 9上不起作用。

8 个答案:

答案 0 :(得分:11)

这是我的代码

if (&UIApplicationOpenSettingsURLString != NULL) { 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]]; 
} 

尝试将prefs添加到https://stackoverflow.com/a/31253743/3668465所做的网址方案

答案 1 :(得分:6)

这适用于iOS 10,

  

转到目标 - > (申请) - >信息 - >网址类型 - > +

URL Schemes

  

首选项

然后致电,

- (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"]];
    }
}

答案 2 :(得分:5)

根据Apple的New Review标准,我们不应该使用这种方式来打开Wi-Fi设置。我已经在我的应用程序中使用了很长时间,最近苹果拒绝了以下评论。

  

您的应用使用“ prefs:root =“非公开URL方案,这是一种   私人实体。应用程序上不允许使用非公共API   存储,因为如果使用这些API可能会导致不良的用户体验   改变。

因此,您可以使用UIApplicationOpenSettingsURLString导航至应用程序的设置。

快捷代码:

if let settingsUrl = URL.init(string: UIApplicationOpenSettingsURLString), UIApplication.shared.canOpenURL(settingsUrl) {
                    UIApplication.shared.openURL(settingsUrl)
                }

答案 3 :(得分:3)

所有条件:

    NSURL * urlCheck1 = [NSURL URLWithString:@"App-Prefs:root=WIFI"];
    NSURL * urlCheck2 = [NSURL URLWithString:@"prefs:root=WIFI"];
    NSURL * urlCheck3 = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

    if ([[UIApplication sharedApplication] canOpenURL:urlCheck1])
    {
        [[UIApplication sharedApplication] openURL:urlCheck1];
    }
    else if ([[UIApplication sharedApplication] canOpenURL:urlCheck2])
    {
        [[UIApplication sharedApplication] openURL:urlCheck2];
    }
    else if ([[UIApplication sharedApplication] canOpenURL:urlCheck3])
    {
        [[UIApplication sharedApplication] openURL:urlCheck3];
    }
    else
    {
        //Unable to open settings app.
    }

答案 4 :(得分:2)

//Pre iOS 10
NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
if (![[UIApplication sharedApplication] canOpenURL:url])
{   //iOS 10+
    url = [NSURL URLWithString:@"App-Prefs:root=WIFI"];
}
[[UIApplication sharedApplication] openURL:url];

答案 5 :(得分:1)

使用openURL无法直接进入wifi设置。您所能做的就是打开自己应用的设置。

if (&UIApplicationOpenSettingsURLString != nil) {
   NSURL *URL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
   [[UIApplication sharedApplication] openURL:URL];
} else {
  ...
}

答案 6 :(得分:1)

Swift 4.2,iOS 12

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

extension UIApplication {

    ...

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

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

用法:UIApplication.openAppSetting()

我还使用了非公开URL方案,例如:prefs:root=,但是我的应用被拒绝了。因此,如果您要尝试使用深层链接进行更多特定的操作,请不要浪费时间,因为目前您还不能!

答案 7 :(得分:-6)

您可以使用此选项:

iOS> = 4.1可以获取设备当前连接的无线网络的SSID。

为此,您将使用函数CNCopyCurrentNetworkInfo

有关实施的详细信息:iPhone get SSID without private library