好的,我知道有许多关于这个问题的疑问,但它们都是很久以前的。
所以,在地图应用中,如果我关闭该应用的本地化,它会发送一条消息。如果我按下“确定”按钮,“设置应用程序”将被打开。 我的问题是,这是如何可能的? 我怎样能够从我的应用程序中打开“设置应用程序”?
基本上,如果用户关闭了我的应用程序的位置信息功能,我需要做同样的事情,那么我会向他显示一条消息,告诉他将打开“设置应用程序”。
好的,我知道有许多关于这个问题的疑问,但它们都是很久以前的。
所以,在地图应用中,如果我关闭该应用的本地化,它会发送一条消息。如果我按下“确定”按钮,“设置应用程序”将被打开。 我的问题是,这是如何可能的? 我怎样能够从我的应用程序中打开“设置应用程序”?
基本上,如果用户关闭了我的应用程序的位置信息功能,我需要做同样的事情,那么我会向他显示一条消息,告诉他将打开“设置应用程序”。
正如Karan Dua所提到的,现在可以使用UIApplicationOpenSettingsURLString
来实现iOS8中的编程相关内容,详见Apple文档。
示例:
Swift 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之前:
不行。正如你所说,这已经被提及很多次了,要求开启位置服务的弹窗是由苹果提供的而不是应用本身。这就是为什么它能够打开设置应用程序。
以下是一些相关的问题和文章:
根据@Yatheeshaless的回答:
您可以在iOS8中以编程方式打开设置应用程序,但在早期版本的iOS中无法这样做。
Swift:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
Swift 4:
->Swift 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)
}
Objective-C:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
- Paito是的!! 你可以启动设备设置屏幕,我已经在iOS 9.2上测试过了。
步骤1。我们需要添加URL schemes。
前往项目设置-->信息-->URL类型-->添加新的URL schemes。
步骤2。感谢@davidcann,可以通过编程方式启动设置。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
我们还可以通过使用正确的名称来启动子屏幕,例如音乐、位置等。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];
请点击 这里 查看完整的姓名列表,由Henri Normak分享。
更新:
根据评论,每个人都想知道在我的应用提交状态更改后会发生什么?
所以是的!!我成功地更新了提交并且应用程序可以在商店中使用而没有任何投诉。
只是为了确认, 我今天早上刚下载并禁用了位置服务,然后启动了该应用程序,它要求我允许访问位置,并弹出我的警报弹出窗口,将我发送到设置->位置服务页面-->启用-->就这样!!
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
VPNprefs: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
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
Siri
prefs:root=SIRI
Apple Pencil
prefs:root=Pencil
Face ID
prefs:root=PASSCODE
紧急SOS
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
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
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
您可以在iOS 5.0及更高版本上使用此方法:这种方法不再可行。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
iOS 10更新
苹果公司更改了在主线程上异步打开应用的方法。然而,从现在起只能在本地设置中打开应用程序设置。
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
iOS 9更新
现在可以直接进入子设置菜单。但是,必须创建一个URL scheme。有两种方法可以实现:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>prefs</string>
</array>
</dict>
</array>
然后是代码:
Swift
UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)
Objective-C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];
CFBundleURLTypes
是您定义用于打开自己的应用程序的自定义URL方案的位置。 - HangarRash在 Swift 3 / iOS 10+ 中,现在看起来像这样:
if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
UIApplication.shared.open(url, completionHandler: .none)
}
Swift 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)
}
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。
只有在设置在后台运行时,此方法才有效。它将重定向到您的应用程序通知设置,但如果设置未在后台运行,则仅会将您重定向到通知设置。
由于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")
}
}
}