如何以编程方式打开设置应用程序?

25

我正在使用iOS 8.3和Swift。我想从我的应用程序打开设置应用程序。我知道可以使用以下代码:

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

将打开我的应用程序设置。但我不想打开我的应用程序设置。我只想打开设置应用程序并停留在主页面。如果可能,导航到“移动网络”。是否有方法可以实现这个目标?


你好,你找到打开设置主页的解决方案了吗? - Ujesh
3
不。我认为对于我的问题没有解决方案。 - user4615157
4个回答

41

试试这个。

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

Xcode 11.5 - iOS > 10


5
应该将这个标记为正确答案;其他的答案使用了iOS内部机制,可能导致应用商店拒绝。 - mm282
1
这将在iOS 12上打开我的应用程序设置。 - Lucas
1
目前没有办法通过公共API打开甚至是主要的设置界面,只能打开您应用在设置中的设置。 - Kacper Cz
完美。这就是答案。 - zumzum

18

2016年10月11日更新:

iOS10中它将不再有效。到目前为止,我还没有找到任何解决方法。如果你们有任何解决方案,请告诉我。谢谢。

======================================

如果iOS版本<= iOS9,则需要设置URL类型: 输入图像描述

您可以这样做:

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

我在github上有一个演示:http://github.com/zhihuitang/SettingDemo.git

你可以在下面找到所有可用的URL: http://iphonedevwiki.net/index.php/Preferences.app Preferences应用程序注册了一个私有的URL方案,prefs:,下面的列表详细说明了如何打开特定视图 1[2]

prefs:root=General&path=About
prefs:root=General&path=ACCESSIBILITY
prefs:root=AIRPLANE_MODE
prefs:root=General&path=AUTOLOCK
prefs:root=General&path=USAGE/CELLULAR_USAGE
prefs:root=General&path=Bluetooth
prefs:root=General&path=DATE_AND_TIME
prefs:root=FACETIME
prefs:root=General
prefs:root=General&path=Keyboard
prefs:root=CASTLE
prefs:root=CASTLE&path=STORAGE_AND_BACKUP
prefs:root=General&path=INTERNATIONAL
prefs:root=LOCATION_SERVICES
prefs:root=ACCOUNT_SETTINGS
prefs:root=MUSIC
prefs:root=MUSIC&path=EQ
prefs:root=MUSIC&path=VolumeLimit
prefs:root=General&path=Network
prefs:root=NIKE_PLUS_IPOD
prefs:root=NOTES
prefs:root=NOTIFICATIONS_ID
prefs:root=Phone
prefs:root=Photos
prefs:root=General&path=ManagedConfigurationList
prefs:root=General&path=Reset
prefs:root=Sounds&path=Ringtone
prefs:root=Safari
prefs:root=General&path=Assistant
prefs:root=Sounds
prefs:root=General&path=SOFTWARE_UPDATE_LINK
prefs:root=STORE
prefs:root=TWITTER
prefs:root=General&path=USAGE
prefs:root=VIDEO
prefs:root=General&path=Network/VPN
prefs:root=Wallpaper
prefs:root=WIFI
prefs:root=INTERNET_TETHERING

希望这对你有所帮助。


2
@User9527,我尝试了你的代码。在viewdidload中,我使用了let url:NSURL! = NSURL(string : "prefs:root=")UIApplication.sharedApplication().openURL(url),但它没有起作用。我不知道为什么你的可以工作。你能否提供一个使用任何可用共享服务的示例项目? - user4615157
@Sachin Rocken,我在 Github 上制作了一个演示,请检查一下是否能够正常运行:https://github.com/zhihuitang/SettingDemo.git - DàChún
1
有人解决了iOS 10的问题吗? - Ravi Ojha
请使用我上面提供的代码。它已经成功运行了。 - Boosa Ramesh
1
这个API是私有的,如果你想将应用程序提交到商店,苹果很可能会拒绝它。 - Kacper Cz
显示剩余4条评论

10

是的,在iOS 10中进行了更改,请将“prefs:”更改为“App-Prefs:”。

guard let profileUrl = URL(string:"App-Prefs:root=General&path=ManagedConfigurationList") else {
    return
}

if UIApplication.shared.canOpenURL(profileUrl) {
    UIApplication.shared.open(profileUrl, completionHandler: { (success) in
        print(" Profile Settings opened: \(success)")
    })
}


8
这是一种黑客行为,会导致你的应用被拒绝上架到App Store。 - Sibir
非常感谢你的信息,Sibir。有没有其他的替代方案? - Boosa Ramesh
@BoosaRamesh 看起来好像不是这样。:( - justColbs

2
Xcode 14: 你可以做到:
// System settings:
let url = URL(string: UIApplication.openSettingsURLString)!
UIApplication.shared.open(url)

// Notifications settings:
URL(string: UIApplication.openNotificationSettingsURLString)!
UIApplication.shared.open(url)

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