提问人:FelipeDev.- 提问时间:4/14/2011 最后编辑:CopsOnRoadFelipeDev.- 更新时间:7/10/2023 访问量:215436
从其他应用打开“设置”应用
Opening the Settings app from another app
问:
好吧,我知道有很多问题,但它们都是很久以前的事了。
所以。我知道这是可能的,因为地图应用程序做到了。
在地图应用程序中,如果我关闭此应用程序的本地化,它会向我发送一条消息,如果我按确定,“设置应用程序”将打开。 我的问题是,这怎么可能? 如何从我自己的应用程序打开“设置应用程序”?
基本上我需要做同样的事情,如果用户关闭了我的应用程序的位置,那么我会向他显示一条消息,说明将打开“设置应用程序”
答:
正如 Karan Dua 所提到的,现在在 iOS8 中使用 Apple 文档可以做到这一点。UIApplicationOpenSettingsURLString
例:
斯威夫特 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提供的,而不是由应用程序本身提供的。这就是为什么它能够打开设置应用程序的原因。
以下是一些相关问题和文章:
通过单击应用程序首选项中的条目打开 UIPickerView - 如何?
评论
您可以在 iOS 5.0 及更高版本上使用它:这不再起作用。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
评论
您可以在 iOS8 中以编程方式打开设置应用,但不能在早期版本的 iOS 中打开。
迅速:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
斯威夫特 4:
if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
UIApplication.shared.openURL(url)
}
斯威夫特 4.2 (BETA):
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]];
是的!!您可以启动设备设置屏幕,我已经在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)分享的全名列表
更新:
根据评论,每个人都想知道我的申请提交状态发生更改后会发生什么?
所以YES!! I got successful update submission and application is available on store without any complain.
只是为了确认, 我今天早上刚刚下载并禁用了定位服务,然后启动了该应用程序,它要求我提供位置权限,然后我的警报弹出窗口在那里发送给我设置 - >位置服务页面 - >启用 - >就是这样!
![注意: 您的应用可能会被拒绝...即使它被批准,如果你使用这种方法,它也可能在未来的版本中被拒绝......]4
评论
iOS 10更新
Apple 更改了在主线程上打开异步的方法。但是,从现在开始,只能在本机设置中打开应用程序设置。
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
iOS 9 更新
现在可以直接进入子设置菜单。但是,必须创建一个 URL 方案。可以使用两种方式完成:
- XCode - 您可以在 Target、Info、URL Scheme 中找到它。然后,只需键入 prefs。
- 直接添加到 *-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&path=Keyboard")!)
目标-c
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];
评论
Magic Launcher
CFBundleURLTypes
您可以使用以下代码。
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
将此添加到您的班级中,
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")
})
UIApplicationOpenSettingsURLString
这只有在您之前允许任何权限的情况下才有效。例如,位置、照片、联系人、推送通知访问。因此,如果您没有用户的此类权限:
如果 iOS 10 或更高版本,
它将打开“设置”,但随后会崩溃。原因是,您的应用的设置中没有任何内容。
下面的代码将在 iOS 设置中打开您的应用程序设置。
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
由于设备不可用,我无法在 iOS < 10 上检查这一点。
此外,我可以从一些要点中找到以下代码,它在iOS 10上也可以正常工作。但我不确定这是否会得到苹果审查团队的批准。
https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f
迅速 您可以使用以下功能打开带有蓝牙页面的设置应用程序
func openSettingsApp(){
if let settings = NSURL(string: "prefs:root=Bluetooth") {
UIApplication.sharedApplication().openURL(settings)
}
}
同样,这不会打开应用程序的设置。这将打开带有蓝牙的设置应用程序,因为这是与蓝牙的深度链接。
在 Swift 3 / iOS 10+ 中,这现在看起来像
if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
UIApplication.shared.open(url, completionHandler: .none)
}
评论
在 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。
只有当设置在后台时,这才对我有用。它会将您重定向到您的应用通知设置,但如果设置未在后台运行,它只会将您重定向到通知设置。
斯威夫特 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)
}
使用 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;
}
}
快乐编码:)
评论
SWIFT 4.0 (英语)
“openURL”在 iOS 10.0 中已弃用:请使用 openURL:options:completionHandler:改为
UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
斯威夫特 4
我更喜欢以更安全的方式打开设置,
if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {
UIApplication.shared.open(settingUrl)
}
else {
print("Setting URL invalid")
}
要添加到已接受的答案:(来自 Apple 开发人员文档)“当您打开从此字符串 (openSettingsURLString) 构建的 URL 时,系统会启动”设置“应用并显示该应用的自定义设置(如果有)。因此,如果要打开应用的设置,请创建自己的 Settings.bundle。
似乎您可以使用 URL 打开设置并转到特定区域。Apple 可能会更改这些内容并破坏您的应用程序,因此请务必检查是否可以先打开它们。prefs:<area>
从本文中,他们列出了iOS 13.1中的一些:
设置 URL
iCloud的
- iCloud的:
prefs:root=CASTLE
- iCloud备份:
prefs:root=CASTLE&path=BACKUP
无线电
- Wi-Fi:
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
虚拟专用网
- 虚拟专用网:
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(仅限 iPad):
prefs:root=Pencil
面容 ID
- 面容 ID:
prefs:root=PASSCODE
SOS紧急联络
- SOS紧急联络:
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\
App Store
- 应用商店:
prefs:root=STORE
- App 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 浏览器
- 野生动物园:
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 10.0 之后已弃用,请改用。openURL(_:)
open(_:options:completionHandler:)
if let settingsUrl = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsUrl, options: [:]) { completed in
if !completed {
print("Failed opening")
}
}
}
从 iOS 16 开始,您可以使用 openSettingsURLString
if let url = URL(string: UIApplication. openSettingsURLString) {
await UIApplication.shared.open(url)
}
评论