【问题标题】:how to programmatically open the WIFI settings in objective c in iOS9如何在iOS9中以编程方式打开objective c中的WIFI设置
【发布时间】:2016-01-30 23:41:04
【问题描述】:

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

已经测试过:

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

不适用于 iOS 9。

【问题讨论】:

标签: objective-c iphone ios9


【解决方案1】:

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

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

【讨论】:

  • 它的解决方案是打开应用程序设置菜单。我想知道的是如何打开 WiFi 设置菜单。
  • 是的。但是,我的 iPhone 上安装了一个应用程序,它完全符合我的要求,他的名字是“Launcher”,你知道吗?如果这个应用程序可以做,是因为我们不能做同样的事情?
【解决方案2】:

您可以使用此选项:

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

为此,您将使用函数CNCopyCurrentNetworkInfo

实现细节:iPhone get SSID without private library

【讨论】:

  • 这如何解释如何在 iOS 的“设置”应用中打开 WiFi 设置页面?
【解决方案3】:

这是我的代码

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

尝试将首选项添加到像https://stackoverflow.com/a/31253743/3668465 这样的 URL 方案中

【讨论】:

  • 查看this 帖子以获取解决方案
  • 这是应用商店指南所禁止的,我刚刚有一个应用被审核团队拒绝这样做:“您的应用使用“prefs:root=”非公共 URL 方案,即私有实体。App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。”
  • 我们不应该再用这种方式打开 Wi-Fi。 Apple 拒绝二进制文件。
【解决方案4】:

这在 iOS 10 上运行良好,

转到目标-->(应用程序)-->信息--> URL类型--> +

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

【讨论】:

  • 在 iOS 10 中损坏。有修复吗?
  • 是的,这在iOS10中被破坏了
  • This 在 iOS 10 上运行良好
  • 我们不应该再用这种方式打开 Wi-Fi。 Apple 拒绝二进制文件。
【解决方案5】:
//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];

【讨论】:

  • 我们不应该再用这种方式打开 Wi-Fi。 Apple 拒绝二进制文件。
  • @KarthickRamesh 指出。谢谢
【解决方案6】:

所有条件:

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

【讨论】:

  • 我们不应该再用这种方式打开 Wi-Fi。 Apple 拒绝二进制文件。
【解决方案7】:

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

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

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

Swift 代码:

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

【讨论】:

  • 这有什么帮助?此代码只是启动应用程序的设置,与 WiFi 设置无关
  • 请正确阅读答案!苹果不再建议直接导航到 wifi 设置页面。它只是限制用户进行设置。 Apple 希望用户自己导航到相应的设置页面。
  • 对不起,我想问的是“这个 code sn-p 有什么帮助”。您的回答是正确且有帮助的,但代码 sn-p 并不能真正帮助跳转到 WiFi 设置(因为它不再可能了,我明白了)。
【解决方案8】:

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

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2016-09-20
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多