好的,我知道对此有很多疑问,但是它们都是很多年前的。
所以。我知道这是可能的,因为Map应用程序可以做到。
在“地图”应用程序中,如果我关闭了该应用程序的本地化,它将向我发送一条消息,如果按“确定”,则“设置应用程序”将打开。我的问题是,这怎么可能?如何从自己的应用程序打开“设置应用程序”?
基本上,我需要做同样的事情,如果用户关闭了我的应用程序的位置,那么我将向他显示一条消息,提示将打开“设置应用程序”
好的,我知道对此有很多疑问,但是它们都是很多年前的。
所以。我知道这是可能的,因为Map应用程序可以做到。
在“地图”应用程序中,如果我关闭了该应用程序的本地化,它将向我发送一条消息,如果按“确定”,则“设置应用程序”将打开。我的问题是,这怎么可能?如何从自己的应用程序打开“设置应用程序”?
基本上,我需要做同样的事情,如果用户关闭了我的应用程序的位置,那么我将向他显示一条消息,提示将打开“设置应用程序”
Answers:
正如提到卡兰杜阿这是现在可以在iOS8上的使用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提供的,而不是由App本身提供的。这就是为什么它能够打开设置应用程序的原因。
以下是一些相关的问题和文章:
来自@Yatheeshaless的答案:
您可以通过编程方式在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]];
是!!您可以启动设备设置屏幕,我已经在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.
只是为了确认一下,我今天早上刚刚下载并禁用了定位服务,然后启动了该应用,该应用要求我提供定位许可,然后我的警报弹出窗口将我发送到设置->定位服务页面->启用->而已!!
您可以在iOS 5.0和更高版本上使用它:不再起作用。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
prefs:root=General&path=Bluetooth
iOS 10更新
苹果更改了在主线程上打开异步的方法。但是,从现在开始,只能在本机设置中打开应用程序设置。
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
iOS 9更新
现在可以直接进入子设置菜单。但是,必须创建URL方案。可以使用两种方法来完成:
<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
在Appstore中。
在Swift 3 / iOS 10+中,现在看起来像
if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
UIApplication.shared.open(url, completionHandler: .none)
}
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
在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。
这仅在设置处于后台时才与我一起使用。它会将您重定向到您的应用通知设置,但如果设置不是在后台运行,则通常只会将您重定向到通知设置。
似乎您可以使用prefs:<area>
URL打开设置并转到特定区域。Apple可能会更改这些内容并破坏您的应用程序,因此请始终检查是否可以先打开它们。
从这篇文章中,他们列出了其中一些适用于iOS 13.1的内容:
设定网址
iCloud的
prefs:root=CASTLE
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
prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password
虚拟专用网
prefs:root=General&path=VPN
通知事项
prefs:root=NOTIFICATIONS_ID
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
prefs:root=General&path=CARPLAY
prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
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
西里
prefs:root=SIRI
苹果铅笔
prefs:root=Pencil
人脸编号
prefs:root=PASSCODE
紧急求救
prefs:root=EMERGENCY_SOS
电池
prefs:root=BATTERY_USAGE
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
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
视频对话
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
苹果浏览器
prefs:root=SAFARI
prefs:root=SAFARI&path=Content%20Blockers
prefs:root=SAFARI&path=DOWNLOADS
prefs:root=SAFARI&path=Close%20Tabs
prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
prefs:root=SAFARI&path=Page%20Zoom
prefs:root=SAFARI&path=Request%20Desktop%20Website
prefs:root=SAFARI&path=Reader
prefs:root=SAFARI&path=Camera
prefs:root=SAFARI&path=Microphone
prefs:root=SAFARI&path=Location
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
SWIFT 4.0
在iOS 10.0中不建议使用'openURL':请改用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")
}
经过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;
}
}
快乐编码:)
要添加到已接受的答案中,请执行以下操作:(来自Apple开发者文档)“当您打开从该字符串构建的URL(openSettingsURLString)时,系统将启动“设置”应用程序并显示该应用程序的自定义设置(如果有)。因此,如果要打开应用程序的设置,请创建自己的Settings.bundle。
将此添加到您的班级,
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")
})