【问题标题】:How to open Location services screen from setting screen?如何从设置屏幕打开位置服务屏幕?
【发布时间】:2016-10-05 20:48:01
【问题描述】:

我想以编程方式打开位置服务屏幕以开启服务。

【问题讨论】:

    标签: ios objective-c location-services


    【解决方案1】:

    我已经尝试了以上所有答案,它在 iOS11 上不起作用..它只是打开设置页面而不是应用程序设置..最后这工作..

    UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)
    

    Swift 4.2:

    UIApplication.shared.open(URL(string:UIApplication.openSettingsURLString)!)
    

    参考:https://developer.apple.com/documentation/uikit/uiapplicationopensettingsurlstring?language=swift

    【讨论】:

    • 是的。避免在您的应用程序中使用“prefs:root”或“App-Prefs:root”,否则应用程序将被 App Store 拒绝。只需打开设置页面。
    • 这将在“设置”应用中打开您的应用设置,而不是“定位服务”。
    • 它为我进入了“定位服务”!
    【解决方案2】:

    Swift 4.2

    直接进入您的应用设置,如下所示:

    if let bundleId = Bundle.main.bundleIdentifier,
        let url = URL(string: "\(UIApplication.openSettingsURLString)&path=LOCATION/\(bundleId)") 
    {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
    

    【讨论】:

    • 更简单:UIApplication.shared.openURL(URL.init(string: UIApplicationOpenSettingsURLString)!)
    • @TàTruhoada 如果位置服务被禁用,它是没用的,你在这里写的是应用程序位置权限,而不是启用/禁用位置服务本身。如果位置,你不能更改应用程序的位置权限服务本身被禁用
    • 截至 2018 年 5 月 25 日,我们的应用因在指南 2.5.1 - 性能 - 软件要求下使用 prefs:root 而被拒绝
    • 问题询问有关转到定位服务页面而不是应用设置页面
    【解决方案3】:

    您可以像使用下面的代码一样直接打开它,

    但首先在 Info.plist 的 URL Type Like 中设置URL Schemes

    然后在特定事件写下一行:

    目标 - C

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

    Swift 中:

    UIApplication.sharedApplication().openURL(NSURL(string: "prefs:root=LOCATION_SERVICES")!)
    

    希望这会对你有所帮助。

    【讨论】:

    • 实施后会通过App Store审核指南吗?
    • 在 iOS 10 中我需要使用 URL App-Prefs:root=Privacy&path=LOCATION。
    • @MMSousa in IOS 11 URL(string: "App-prefs:root=LOCATION_SERVICES") 仍然可以正常工作...
    • 截至 2018 年 5 月 25 日,我们的应用因在指南 2.5.1 - 性能 - 软件要求下使用 prefs:root 而被拒绝
    【解决方案4】:

    ??

    你想安全吗?使用UIApplicationOpenSettingsURLString,它将打开应用设置,没有深层链接

    正如许多 sub cmets 所说,使用 App-prefs 您的应用将被拒绝。 https://github.com/mauron85/cordova-plugin-background-geolocation/issues/394

    【讨论】:

      【解决方案5】:

      第一步:点击项目名称>>目标>>信息>>url类型

      第二步:

      -(IBAction)openSettingViewToEnableLocationService:(id)sender
      {
          [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
      }
      

      【讨论】:

      【解决方案6】:

      第一:

      添加网址

      转到项目设置 --> 信息 --> URL 类型 --> 添加新的 URL 方案

      见下图:

      第二个:

      使用以下代码打开位置设置:

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

      引用自:https://stackoverflow.com/a/35987082/5575752

      【讨论】:

      • @Joe Susnick 你有 iOS 10 的解决方案吗?感谢您的帮助
      • @EricBrunner 是的,我在上面发布了但网址:App-Prefs:root=Privacy&path=LOCATION 为我工作。
      • @Joe Susnick 很棒。我必须区分 iOS 8,9 和 10.x 还是在所有版本中都有效?再次感谢您的支持!
      • @EricBrunner 我只在 10 上测试过它,但我很有信心它会在 9 上工作。至于 8,不确定。
      • 截至 2018 年 5 月 25 日,我们的应用因在指南 2.5.1 - 性能 - 软件要求下使用 prefs:root 而被拒绝
      【解决方案7】:

      如果您设置了 locationManager.startUpdatingLocation() 并且您已在 iphone 上禁用,它会自动向您显示一个 alertView,其中包含打开和激活位置的选项。

      【讨论】:

      • 这恰好工作了一次。这是我第一次尝试。 iOS 会以任何方式记住我选择的选项吗?我知道startUpdatingLocation() 向我展示了一个标准对话框来导航到定位服务设置。它导航到系统范围的位置服务设置!但它只是在我第一次调用它时才这样做。对此有什么想法吗?
      • 为了回复之前的评论,Apple 文档明确指出此弹出窗口在每个应用程序生命周期内只能显示一次。如果您希望它重新出现,则需要重新启动应用程序。没有办法解决这个问题:(
      【解决方案8】:

      斯威夫特 5+
      Easy Way Direct 您的申请页面将打开

      if let BUNDLE_IDENTIFIER = Bundle.main.bundleIdentifier,
          let url = URL(string: "\(UIApplication.openSettingsURLString)&path=LOCATION/\(BUNDLE_IDENTIFIER)") {
          UIApplication.shared.open(url, options: [:], completionHandler: nil)
      }
      

      【讨论】:

      • 请分享错误消息,为什么它拒绝我的应用程序仍然使用此代码
      • 指南 2.5.1 性能 - 软件要求 您的应用使用“prefs:root=" 非公共 URL 方案,这是一个私有实体。 App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。具体来说,您的应用程序使用以下非公共 URL 方案 app-prefs:root=privacy&path=location 在此应用程序的未来提交中继续使用或隐藏非公共 API 可能会导致您的 Apple Developer 帐户被终止,以及从 App Store 中删除所有相关应用
      【解决方案9】:

      实际上有更简单的解决方案。它会显示您的应用设置以及定位服务/相机访问等:

      func showUserSettings() {
          guard let urlGeneral = URL(string: UIApplicationOpenSettingsURLString) else {
              return
          }
          UIApplication.shared.open(urlGeneral)
      }
      

      【讨论】:

      • 如果位置服务本身在系统中被禁用,您将无法启用位置并更改应用程序的权限,因此首先您必须启用位置服务(参见作者问题的屏幕截图)
      【解决方案10】:

      将prefs添加为url类型后,使用以下代码直接进入应用程序的位置设置。

      if let url = URL(string: "App-prefs:root=LOCATION_SERVICES") {
           UIApplication.shared.open(url, options: [:], completionHandler: nil)
      }
      

      【讨论】:

      • 截至 2018 年 5 月 25 日,我们的应用因此在指南 2.5.1 - 性能 - 软件要求下被拒绝
      • @Ted 甚至我们的应用也因此被拒绝。你知道这个的替代品吗?或解决方法让这个工作?帮助将不胜感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2019-06-03
      • 2013-07-25
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多