如何以编程方式在iOS9中使用Objective-C打开WIFI设置

13

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

已尝试过:

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

不支持iOS 9。


1
这是一个仅限英语的网站。请翻译(如有需要,请使用http://translate.google.com)。或使用[Stackoverflow葡萄牙语](http://pt.stackoverflow.com/)。 - rmaddy
1
我在9.1上尝试了一下,它可以正常工作。 - Fernando García Corrochano
@Fernando Garcia Corrochano,请您发帖分享您的代码,看看我做错了什么? - Helton Fernandes Sampaio
这是我的代码(与你的相同):if (&UIApplicationOpenSettingsURLString != NULL) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]]; }尝试像https://dev59.com/6msy5IYBdhLWcg3w5CBr#31253743中所示,将prefs添加到URL方案中。 - Fernando García Corrochano
@FernandoGarcíaCorrochano。-> 天啊,代码成功了!!非常非常非常感谢您!!实际上要运行代码,必须在URL方案中添加“prefs”。我的朋友,请使用您的解决方案组装一个响应,以便我可以给出一个+。 - Helton Fernandes Sampaio
显示剩余2条评论
8个回答

11

这是我的代码

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

尝试像https://dev59.com/6msy5IYBdhLWcg3w5CBr#31253743那样向URL方案添加首选项


请参考此帖子获取在iOS 10上以Objective-C编写的程序化打开WiFi设置的解决方案。 - Shuvo Joseph
7
这在应用商店准则中是被禁止的,我的一款应用因为使用了“prefs: root=”非公开URL scheme被审核团队拒绝: “您的应用程序使用了“prefs: root=”非公开URL scheme,这是一个私有实体。在App Store上不允许使用非公开API,因为这可能会导致用户体验不佳,如果这些API发生变化。” - Bersaelor
3
我们不再应该使用这种方式来打开 Wi-Fi。苹果拒绝这个二进制文件。 - Karthick Ramesh

7
根据苹果的新审查标准,我们不应该使用这种方法来打开Wi-Fi设置。我在我的应用程序中使用了很长时间,最近苹果以下面的评论拒绝了我的应用程序。
“您的应用程序使用了“prefs:root =”非公共URL方案,这是一个私有实体。在App Store上不允许使用非公共API,因为这些API更改可能会导致用户体验差。”
所以你可以使用UIApplicationOpenSettingsURLString直接导航到应用程序的设置页面。
Swift 代码:
if let settingsUrl = URL.init(string: UIApplicationOpenSettingsURLString), UIApplication.shared.canOpenURL(settingsUrl) {
                    UIApplication.shared.openURL(settingsUrl)
                }

这有什么帮助吗?这段代码只是启动应用程序的设置,与WiFi设置无关。 - Vince Varga
请仔细阅读答案!苹果不再建议直接导航到WiFi设置页面。它只限制用户进入设置。苹果希望用户自己导航到相应的设置页面。 - Karthick Ramesh
抱歉,我的意思是“这个代码片段如何帮助”。你的回答是正确和有用的,但是这个代码片段并不能真正帮助跳转到WiFi设置(因为现在根本不可能了,我明白)。 - Vince Varga

7

这在iOS 10上很好用,

前往Targets --> (应用程序) --> 信息 --> URL类型 --> +

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

5
在iOS 10中出现了故障。有修复方法吗? - shim
2
是的,这在iOS10中出现了问题。 - BigCheesy
这在iOS 10上运行良好。 - Shuvo Joseph
3
我们不再应该使用这种方式来打开Wi-Fi。苹果拒绝该二进制文件。 - Karthick Ramesh

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.
    }

5
我们不再可以使用这种方式来打开 Wi-Fi。苹果拒绝了二进制文件。 - Karthick Ramesh

2

使用openURL无法直接进入WiFi设置。您只能打开您自己应用程序的设置。

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

它的解决方案打开了应用程序设置菜单。我想知道的是如何打开WiFi设置菜单。 - Helton Fernandes Sampaio
1
是的,没错。不过我在我的iPhone上安装了一个正好符合我要求的应用程序,它叫做“启动器”,你知道吗?如果这个应用程序能做到,为什么我们不能做同样的事情呢? - Helton Fernandes Sampaio

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];

2
我们不再应该使用这种方式来打开Wi-Fi。苹果拒绝二进制文件。 - Karthick Ramesh
@KarthickRamesh 已经注意了。谢谢 - Pierre

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=, 但是我的应用被拒绝了。所以如果你想要通过深度链接做更具体的事情,不要浪费时间,因为目前你做不到!


-6

5
这怎样解释在iOS的设置应用程序中如何打开WiFi设置页面? - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接