【问题标题】:Opening the Settings app from another app从另一个应用程序打开设置应用程序
【发布时间】:2011-08-05 01:39:05
【问题描述】:

好的,我知道有很多关于它的问题,但它们都是很久以前的。

所以。我知道这是可能的,因为 Map 应用程序可以做到。

在地图应用程序中,如果我关闭此应用程序的本地化,它会向我发送一条消息,如果我按确定,“设置应用程序”将打开。 我的问题是,这怎么可能? 如何从我自己的应用程序中打开“设置应用程序”?

基本上我需要做同样的事情,如果用户关闭我的应用程序的位置,那么我会向他显示一条消息,说明将打开“设置应用程序”

【问题讨论】:

标签: ios objective-c iphone application-settings appsettings


【解决方案1】:

正如Karan Dua 所提到的,这是now possible in iOS8 使用UIApplicationOpenSettingsURLString 请参阅Apple's Documentation

示例:

斯威夫特 4.2

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

在 Swift 3 中:

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

在 Swift 2 中:

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

在 Objective-C 中

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

iOS 8 之前的版本:

你不能。正如您所说,这已被多次介绍,并且要求您打开位置服务的弹出窗口由 Apple 提供,而不是由应用程序本身提供。这就是它能够打开设置应用程序的原因。

这里有一些相关的问题和文章:

is it possible to open Settings App using openURL?

Programmatically opening the settings app (iPhone)

How can I open the Settings app when the user presses a button?

iPhone: Opening Application Preferences Panel From App

Open UIPickerView by clicking on an entry in the app's preferences - How to?

Open the Settings app?

iOS: You’re Doing Settings Wrong

【讨论】:

  • 如果您需要更权威的答案,您可以尝试在 Apple 开发者论坛 developer.apple.com/devforums> 上提问或在 developer.apple.com/bugreporter> 提交错误 - 如果这是一个已知问题,它应该会回来作为“行为正确”或原始错误的副本。
  • 现在可以在 iOS 8 中使用 [NSURL URLWithString:UIApplicationOpenSettingsURLString]
  • in swift 3 - UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
  • 谨慎使用此方法。我使用了它,几个月后我的应用程序被 Apple 拒绝,并显示以下消息:您的应用程序使用“prefs:root=”非公共 URL 方案,这是一个私有实体。 App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。在未来提交此应用时继续使用或隐藏非公开 API 可能会导致您的 Apple Developer 帐户被终止,以及从 App Store 中删除所有相关应用。
【解决方案2】:

来自@Yatheeshalessanswer

您可以在 iOS8 中以编程方式打开设置应用程序,但不能在早期版本的 iOS 中。

斯威夫特:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

斯威夫特 4:

if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
    UIApplication.shared.openURL(url)
}

Swift 4.2(测试版):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

目标-C:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

【讨论】:

  • 这似乎会打开您应用的“设置”应用部分。用户必须点击返回几次才能看到设置的主屏幕。
  • 小修正..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
  • @Paito 上面这行是指向应用隐私设置。有没有办法直接进入设备设置的隐私部分?如果您知道,请发表评论。这种重定向是可能的,因为我在地图应用程序中找到了它,它指向隐私部分的位置设置。
  • 小 Swift 更正:UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
  • @PavanKotesh- 是的,但是应用程序设置将具有您需要的权限,在我的情况下,我需要访问联系人,这些联系人确实出现在带有上述代码的应用程序设置中。
【解决方案3】:

是的!!你可以启动设备设置屏幕,我已经在 iOS 9.2 上测试过

第 1 步。我们需要添加 URL 方案

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

第 2 步。 以编程方式启动设置感谢@davidcann

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

我们也可以通过使用正确的名称来启动音乐、位置等子屏幕

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

查看由 Henri Normak 分享的完整名单here


更新:

根据评论,每个人都想知道我的申请提交状态更改后会发生什么?

所以YES!! I got successful update submission and application is available on store without any complain.

只是为了确认, 我今天早上刚下载并禁用了定位服务,然后启动了该应用程序,它要求我获得位置许可,然后我的警报弹出窗口在那里向我发送设置 -> 定位服务页面 -> 启用 -> 就是这样!

![NOTICE: Your app might be rejected ... even if it's approved it can be rejected in future version if you use this method...]4

【讨论】:

  • 谢谢,在 iOS 6 和 7 上也适用于我。您是否尝试过通过 Apple 的审核流程?
  • @Flo 我会告诉你的,因为目前我已经推动了 beta 测试。
  • iOS 9.3。像魅力一样工作。我什至在设置应用程序中看到“返回 [我的应用程序名称]”。当然,这是支持的,因为我看到很多其他应用程序都在做这种事情!
  • 在 iOS 10 上,新的 url 不是“prefs:root=....”而是“App-Prefs:root=...”。
  • 您的应用可能会被拒绝......即使它被批准,如果您使用这种方法,它也可能在未来的版本中被拒绝......
【解决方案4】:

似乎您可以使用prefs:<area> URL 打开设置并转到特定区域。 Apple 可能会更改这些并破坏您的应用程序,因此请始终检查您是否可以先打开它们。

从这个article,他们列出了其中一些适用于 iOS 13.1:

设置网址

iCloud

  • iCloud:prefs:root=CASTLE
  • iCloud 备份:prefs:root=CASTLE&path=BACKUP

无线收音机

  • 无线网络:prefs:root=WIFI
  • 蓝牙:prefs:root=Bluetooth
  • 手机:prefs:root=MOBILE_DATA_SETTINGS_ID

个人热点

  • 个人热点:prefs:root=INTERNET_TETHERING
  • 个人热点⇾家庭分享:prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • 个人热点⇾ Wi-Fi 密码:prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

  • VPN:prefs:root=General&path=VPN

通知

  • 通知:prefs:root=NOTIFICATIONS_ID
  • 通知⇾ Siri 建议:prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

声音

  • 声音:prefs:root=Sounds
  • 铃声:prefs:root=Sounds&path=Ringtone

请勿打扰

  • 请勿打扰:prefs:root=DO_NOT_DISTURB
  • 请勿打扰 ⇾ 允许来自:prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From 的呼叫

屏幕时间

  • 屏幕时间:prefs:root=SCREEN_TIME
  • 屏幕时间⇾停机时间:prefs:root=SCREEN_TIME&path=DOWNTIME
  • 屏幕时间⇾应用限制:prefs:root=SCREEN_TIME&path=APP_LIMITS
  • 屏幕时间⇾始终允许:prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

常规

  • 一般:prefs:root=General
  • 一般⇾关于:prefs:root=General&path=About
  • 常规 ⇾ 软件更新:prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • 常规⇾ CarPlay:prefs:root=General&path=CARPLAY
  • 常规⇾后台应用刷新:prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • 常规 ⇾ 多任务处理(仅限 iPad):prefs:root=General&path=MULTITASKING
  • 常规⇾日期和时间:prefs:root=General&path=DATE_AND_TIME
  • 常规⇾键盘:prefs:root=General&path=Keyboard
  • 常规⇾键盘⇾键盘:prefs:root=General&path=Keyboard/KEYBOARDS
  • 常规⇾键盘⇾硬件键盘:prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • 常规⇾键盘⇾文本替换:prefs:root=General&path=Keyboard/USER_DICTIONARY
  • 常规⇾键盘⇾单手键盘:prefs:root=General&path=Keyboard/ReachableKeyboard
  • 常规⇾语言和地区:prefs:root=General&path=INTERNATIONAL
  • 通用⇾字典:prefs:root=General&path=DICTIONARY
  • 一般 ⇾ 个人资料:prefs:root=General&path=ManagedConfigurationList
  • 常规⇾重置:prefs:root=General&path=Reset

控制中心

  • 控制中心:prefs:root=ControlCenter
  • 控制中心⇾自定义控制:prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

显示

  • 显示:prefs:root=DISPLAY
  • 显示⇾自动锁定:prefs:root=DISPLAY&path=AUTOLOCK
  • 显示⇾文本大小:prefs:root=DISPLAY&path=TEXT_SIZE

辅助功能

  • 辅助功能:prefs:root=ACCESSIBILITY

壁纸

  • 壁纸:prefs:root=Wallpaper

Siri

  • Siri:prefs:root=SIRI

Apple Pencil

  • Apple Pencil(仅限 iPad):prefs:root=Pencil

人脸识别

  • 人脸ID:prefs:root=PASSCODE

紧急求救

  • 紧急求救:prefs:root=EMERGENCY_SOS

电池

  • 电池:prefs:root=BATTERY_USAGE
  • 电池 ⇾ 电池运行状况(仅限 iPhone):prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

隐私

  • 隐私:prefs:root=Privacy
  • 隐私⇾定位服务:prefs:root=Privacy&path=LOCATION
  • 隐私⇾联系人:prefs:root=Privacy&path=CONTACTS
  • 隐私⇾日历:prefs:root=Privacy&path=CALENDARS
  • 隐私⇾提醒:prefs:root=Privacy&path=REMINDERS
  • 隐私 ⇾ 照片:prefs:root=Privacy&path=PHOTOS
  • 隐私⇾麦克风:prefs:root=Privacy&path=MICROPHONE
  • 隐私⇾语音识别:prefs:root=Privacy&path=SPEECH_RECOGNITION
  • 隐私⇾相机:prefs:root=Privacy&path=CAMERA
  • 隐私⇾动作:prefs:root=Privacy&path=MOTION\

应用商店

  • 应用商店:prefs:root=STORE
  • 应用商店⇾应用下载:prefs:root=STORE&path=App%20Downloads
  • App Store ⇾ 视频自动播放:prefs:root=STORE&path=Video%20Autoplay

钱包

  • 钱包:prefs:root=PASSBOOK

密码和帐户

  • 密码和帐号:prefs:root=ACCOUNTS_AND_PASSWORDS
  • 密码和账户⇾获取新数据:prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • 密码和账户⇾添加账户:prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

邮件

  • 邮箱:prefs:root=MAIL
  • 邮件⇾预览:prefs:root=MAIL&path=Preview
  • 邮件⇾滑动选项:prefs:root=MAIL&path=Swipe%20Options
  • 邮件⇾通知:prefs:root=MAIL&path=NOTIFICATIONS
  • 邮件⇾被阻止:prefs:root=MAIL&path=Blocked
  • 邮件⇾静音线程操作:prefs:root=MAIL&path=Muted%20Thread%20Action
  • 邮件⇾阻止发件人选项:prefs:root=MAIL&path=Blocked%20Sender%20Options
  • 邮件⇾标记地址:prefs:root=MAIL&path=Mark%20Addresses
  • 邮件⇾提高报价等级:prefs:root=MAIL&path=Increase%20Quote%20Level
  • 邮件⇾在回复中包含附件:prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • 邮件⇾签名:prefs:root=MAIL&path=Signature
  • 邮件⇾默认帐户:prefs:root=MAIL&path=Default%20Account

联系人

  • 联系人:prefs:root=CONTACTS

日历

  • 日历:prefs:root=CALENDAR
  • 日历⇾备用日历:prefs:root=CALENDAR&path=Alternate%20Calendars
  • 日历⇾同步:prefs:root=CALENDAR&path=Sync
  • 日历⇾默认警报时间:prefs:root=CALENDAR&path=Default%20Alert%20Times
  • 日历⇾默认日历:prefs:root=CALENDAR&path=Default%20Calendar

备注

  • 备注:prefs:root=NOTES
  • 备注⇾默认账户:prefs:root=NOTES&path=Default%20Account
  • 注意事项⇾密码:prefs:root=NOTES&path=Password
  • 笔记 ⇾ 笔记排序方式:prefs:root=NOTES&path=Sort%20Notes%20By
  • 笔记⇾新笔记开头:prefs:root=NOTES&path=New%20Notes%20Start%20With
  • 注释⇾对选中的项目进行排序:prefs:root=NOTES&path=Sort%20Checked%20Items
  • 注释⇾线条和网格:prefs:root=NOTES&path=Lines%20%26%20Grids
  • 笔记⇾从锁定屏幕访问笔记:prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

提醒

  • 提醒:prefs:root=REMINDERS
  • 提醒 ⇾ 默认列表:prefs:root=REMINDERS&path=DEFAULT_LIST

语音备忘录

  • 语音备忘录:prefs:root=VOICE_MEMOS

电话

  • 电话:prefs:root=Phone

消息

  • 留言:prefs:root=MESSAGES

FaceTime

  • FaceTime:prefs:root=FACETIME

地图

  • 地图:prefs:root=MAPS
  • 地图⇾驾驶和导航:prefs:root=MAPS&path=Driving%20%26%20Navigation
  • 地图⇾公交:prefs:root=MAPS&path=Transit

指南针

  • 指南针:prefs:root=COMPASS

测量

  • 测量:prefs:root=MEASURE

Safari

  • Safari:prefs:root=SAFARI
  • Safari ⇾ 内容拦截器:prefs:root=SAFARI&path=Content%20Blockers
  • Safari ⇾ 下载:prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ 关闭标签:prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ 清除历史记录和数据:prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari ⇾ 页面缩放:prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ 请求桌面网站:prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ 读者:prefs:root=SAFARI&path=Reader
  • Safari ⇾ 相机:prefs:root=SAFARI&path=Camera
  • Safari ⇾ 麦克风:prefs:root=SAFARI&path=Microphone
  • Safari ⇾ 位置:prefs:root=SAFARI&path=Location
  • Safari ⇾ 高级:prefs:root=SAFARI&path=ADVANCED

新闻

  • 新闻:prefs:root=NEWS

健康

  • 健康:prefs:root=HEALTH

快捷方式

  • 快捷方式:prefs:root=SHORTCUTS

音乐

  • 音乐:prefs:root=MUSIC
  • 音乐⇾蜂窝数据:prefs:root=MUSIC&path=com.apple.Music:CellularData
  • 音乐⇾优化存储:prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • 音乐⇾情商:prefs:root=MUSIC&path=com.apple.Music:EQ
  • 音乐⇾音量限制:prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

电视

  • 设置⇾电视:prefs:root=TVAPP

照片

  • 图片:prefs:root=Photos

相机

  • 相机:prefs:root=CAMERA
  • 相机⇾录制视频:prefs:root=CAMERA&path=Record%20Video
  • 相机⇾录制慢动作:prefs:root=CAMERA&path=Record%20Slo-mo

书籍

  • 书籍:prefs:root=IBOOKS

游戏中心

  • 游戏中心:prefs:root=GAMECENTER

【讨论】:

  • 这不适用于 iOS 14 ..总是显示设置而不是提到的路径。任何解决方法?
  • 是的,我在 iOS 14 上也遇到了同样的问题,但在我的情况下,当我删除根前缀时它得到了解决。例如,我使用了“App-prefs:Privacy&path=LOCATION”而不是“prefs:root=Privacy&path=LOCATION”,它适用于 iOS 14。
【解决方案5】:

您可以在 iOS 5.0 及更高版本上使用它:这不再有效。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

【讨论】:

  • @MarkGranoff 不,它似乎在技术上没有记录,但它并不像普通的未记录 API 那样糟糕,因为它只是一个 URL 方案。您可以先使用 canOpenURL: 检查它。另外,这里有一个关于它的线程:devforums.apple.com/message/543818
  • 您可以根据this article进入设置中的不同区域。例如,此 URL 会将您带到蓝牙设置 prefs:root=General&path=Bluetooth
  • 我的应用程序因使用私有 API 而被拒绝,因为我打开了 url:@"prefs:root=Brightness"。通常,未记录意味着私有。
  • Apple 已声明这不是公共 API,因此不再受支持。有一个关于这个问题的错误,编号 11253669。
  • 我刚刚看到这在 Strava 应用程序中有效。关闭蓝牙,然后在应用程序中打开它。然后它要求进入设置应用程序并直接进入蓝牙设置。这适用于 iOS5.1。有没有办法找出他们使用的方案?
【解决方案6】:

iOS 10 更新

Apple 更改了在主线程上打开异步的方法。但是,从现在开始,只能在原生设置中打开应用设置。

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

iOS 9 更新

现在可以直接进入子设置菜单。但是,必须创建 URL 方案。可以通过两种方式完成:

  1. XCode - 您可以在 Target、Info、URL Scheme 中找到它。然后,只需输入 prefs。
  2. 直接添加到 *-Info.plist。添加以下内容: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

然后是代码:

斯威夫特

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&amp;path=Keyboard")!)

目标-c

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&amp;path=Keyboard"]];

【讨论】:

  • 我尝试了 iOS 10.x 解决方案,但它对我不起作用 - 没有任何反应。
  • @MarkPeters,你找到方法了吗?这可能会有很大帮助。谢谢。
  • 不,我没有。我仍然不知道这是 iOS 错误还是 Apple 刚刚删除了该功能。
  • 我认为,他们仍然可以使用扩展。前应用是 Appstore 中的 Magic Launcher
【解决方案7】:

在 Swift 3 / iOS 10+ 中,现在看起来像

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}

【讨论】:

  • 如何进入通知界面?因为 if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=io.artup.artup") { if #available(iOS 10.0, *) { UIApplication.shared.open(url, completionHandler: .none) }但我在 iPhone 6 中而不是在 iPhone 7 plus 中去通知?
  • 这会让你的应用被拒绝。他们将其置于私有 API 之下。
  • 我的应用被拒绝了,使用这个“App-Prefs:root”
  • 这里强调一下别人提到的,不要使用这种方法,它会让你的应用被拒绝。使用此类重复提交应用程序会导致您的开发者帐户被关闭。
【解决方案8】:

斯威夫特 3:

guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
  // Fallback on earlier versions
  UIApplication.shared.openURL(url)
}

【讨论】:

    【解决方案9】:

    在 Swift 3 中,我只需要这个(例如重定向到我的应用通知):

    if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(url, completionHandler: .none)
        } else {
            // Fallback on earlier versions
        }
    }
    

    来源:phynet gist

    仅当设置在后台时才对我有用。它会将您重定向到您的应用通知设置,但如果设置未在后台运行,它只会将您重定向到一般通知设置。

    【讨论】:

      【解决方案10】:

      UIApplicationOpenSettingsURLString 这只有在您之前已获得任何许可的情况下才有效。例如位置、照片、联系人、推送通知访问。因此,如果您没有来自用户的此类权限:

      如果iOS 10 或更高版本

      它会打开设置但随后崩溃。原因是您的应用的设置中没有任何内容。

      以下代码将在 iOS 设置中打开您的应用程序设置。

      NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
      if ([[UIApplication sharedApplication] canOpenURL:url]) {
          [[UIApplication sharedApplication] openURL:url];
      }
      

      由于设备不可用,我无法在 iOS

      另外,我可以从一些要点中找到以下代码,它在 iOS 10 上也可以正常工作。但我不确定这是否会得到 Apple 审核团队的批准。

      https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f

      【讨论】:

        【解决方案11】:

        您可以使用下面的代码。

        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        

        【讨论】:

          【解决方案12】:

          SWIFT 4.0

          'openURL' 在 iOS 10.0 中已弃用:请使用 openURL:options:completionHandler: 代替

          UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
          

          【讨论】:

            【解决方案13】:

            Swift 4

            我更喜欢以更安全的方式打开设置,

            if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {
            
                UIApplication.shared.open(settingUrl)
            }
            else {
                print("Setting URL invalid")
            }
            

            【讨论】:

              【解决方案14】:

              斯威夫特 您可以使用以下功能通过蓝牙页面打开设置应用程序

              func openSettingsApp(){
                  if let settings = NSURL(string: "prefs:root=Bluetooth") {
                      UIApplication.sharedApplication().openURL(settings)
                  }
              }
              

              同样,这不会打开应用程序的设置。这将使用蓝牙打开设置应用程序,因为这是与蓝牙的深层链接。

              【讨论】:

                【解决方案15】:

                在 iOS 10 上测试。工作

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

                快乐编码:)

                【讨论】:

                • 这会让你的应用被拒绝。刚刚发生在我身上。
                • 是这样,但是这行代码会直接带你到想要的位置
                • 是的,它会让你到达那里。我并不是说它不起作用,我只是指出它会让你在应用审查期间被拒绝。 “prefs:root”是根据审查小组告诉我们的私有 url 方案。 (你可能会很幸运,他们有一段时间没有注意到,我们有一段时间使用该功能并在审阅者注意到之前通过了几次审查)
                • 感谢您的信息,我会尝试其他方法,但现在我被困在 VPN 连接中,正在寻找解决方案。
                【解决方案16】:

                添加到接受的答案:(来自苹果开发者文档)“当您打开从该字符串 (openSettingsURLString) 构建的 URL 时,系统会启动设置应用程序并显示应用程序的自定义设置(如果有)。”因此,如果您想为您的应用打开设置,请创建您自己的 Settings.bundle。

                【讨论】:

                  【解决方案17】:

                  由于 openURL(_:) 在 iOS 10.0 之后已弃用,请改用 open(_:options:completionHandler:)

                  if let settingsUrl = URL(string: UIApplication.openSettingsURLString)  {
                          UIApplication.shared.open(settingsUrl, options: [:]) { completed in
                               if !completed {
                                   print("Failed opening")
                               }
                          }
                  }
                  

                  【讨论】:

                    【解决方案18】:

                    将此添加到您的课程中,

                     public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
                                YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
                                    if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
                                        UIApplication.sharedApplication().openURL(settingsURL)
                                    }
                                    }, onButton2Click: {
                                        onCancel?()
                                })
                            }
                    
                     public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
                                dispatch_async(dispatch_get_main_queue()) {
                                    let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
                    
                                    alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
                                        onButton1Click?()
                                    }))
                    
                                    alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
                                        onButton2Click?()
                                    }))
                    
                                    viewController.presentViewController(alert, animated: true, completion: nil)
                                }
                            }
                    

                    这样打电话,

                    YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
                      print("canceled")
                    })
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2016-12-29
                      • 1970-01-01
                      • 2019-08-01
                      • 1970-01-01
                      • 2014-01-17
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多