【问题标题】:How to programmatically open the WIFI settings in Objective-C on iOS 10如何在 iOS 10 上以编程方式在 Objective-C 中打开 WIFI 设置
【发布时间】:2017-02-28 19:45:54
【问题描述】:

以下代码在 iOS 9 上运行良好,请参阅 this 帖子。但它在 iOS 10 上不起作用。如何在 iOS 10 上以编程方式打开 WIFI 设置

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

【问题讨论】:

    标签: ios objective-c iphone wifi ios10


    【解决方案1】:

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

    选择目标后:

    • 导航到“信息”选项卡。
    • 滚动到底部后,您应该会看到“URL 类型”部分。
    • 添加一个新的(通过单击加号按钮)并用“prefs”填写“URL Schemes”。

    应该是这样的:

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

    更新:

    如果它-不知何故-没有按预期工作,您可能需要关注此workaround

    希望有所帮助。

    【讨论】:

    • openUrl 已贬值
    • 你会被拒绝。他们现在检测到“prefs”网址的使用
    【解决方案2】:

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

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

    【讨论】:

    • 遗憾的是没有官方文档,但有些页面已经引用了很多,例如gist.github.com/phynet/471089a51b8f940f0fb4
    • 与其他人不同,这对我也适用于 iOS 10
    • 我的应用刚刚因此被拒绝。不要使用
    【解决方案3】:

    试试这个:

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

    谢谢:)

    【讨论】:

      【解决方案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 11 中 App-Prefs 将我带到应用特定的首选项,而不是 wifi 屏幕。
      • 这里有同样的问题:在 iOS11 中,App-Prefs 将我带到应用程序的特定首选项,而不是 wifi 屏幕。 iOS11+如何解决?
      【解决方案5】:

      Swift 4.2、iOS 12

      使用较新版本的 iOS 不再可能进行这种深度链接。我的应用最近因使用:“非公共 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()

      【讨论】:

      • 所以这只会进入设置页面,而不是 wifi 列表页面,对吗?
      • 没错,很遗憾我们无法打开设置页面。 (或者至少,目前不在生产应用中)
      【解决方案6】:

      对于斯威夫特:

      let url = URL(string: "App-Prefs:root=WIFI")
      
          if UIApplication.shared.canOpenURL(url!){
              UIApplication.shared.openURL(url!)
      
          }
      

      【讨论】:

      • 这会让你的应用被拒绝
      【解决方案7】:
       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
      
                  })
              }
      

      【讨论】:

        猜你喜欢
        • 2016-01-30
        • 2017-08-21
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 2017-02-08
        相关资源
        最近更新 更多