我需要在应用程序中以编程方式打开设置。我在SO上进行了搜索,但到处都说这是不可能的。但今天我看到Facebook应用程序中实现了这个功能。当你点击一个UIAlertView
上的一个按钮时,就会打开设置。所以确实可以打开设置,我亲眼见证了这一点。但如何做到呢?有人知道Facebook是如何做到的吗?
我需要在应用程序中以编程方式打开设置。我在SO上进行了搜索,但到处都说这是不可能的。但今天我看到Facebook应用程序中实现了这个功能。当你点击一个UIAlertView
上的一个按钮时,就会打开设置。所以确实可以打开设置,我亲眼见证了这一点。但如何做到呢?有人知道Facebook是如何做到的吗?
iOS 8可以通过编程方式打开设置界面!
以下是代码:
- (void)openSettings
{
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
如果您的应用程序有其自己的设置捆绑包,那么设置将被打开以显示您的应用程序的设置。如果您的应用程序没有设置捆绑包,则将显示主要设置页面。
如果您的应用程序有其自己的设置捆绑包,那么设置将被打开以显示您的应用程序的设置。如果您的应用程序没有设置捆绑包,则将显示主要设置页面。
你不能,因为没有 API 调用可以做到这一点。
只有系统对话框、Apple 框架的对话框才能打开设置应用程序。在 iOS 5 中有一个应用程序 URL 方案可以打开系统对话框,但后来被 Apple 删除了。
随着 iOS 8 的到来,您可以在应用程序页面上打开设置对话框。
if (&UIApplicationOpenSettingsURLString != NULL) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
else {
// Present some dialog telling the user to open the settings app.
}
iOS 8可以通过编程的方式打开设置界面!
以下是当前已知的设置应用程序中的URL列表:
- (void) openSettings
{
if (&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
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=Brightness 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
位置服务
的。 - dichenVito Ziv在Swift中的回答。
func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil)
}
settings.bundle
,会发生什么行为? 我发现当通过 Xcode 启动时,此 URL 会将我带到顶级设置页面。但是当通过 TestFlight 时,它会进入我的(空)应用程序设置子页面。但我没有创建 settings.bundle
,也没有在我的 .app
产品中找到一个... - pkambUIRequiresPersistentWiFi
是我要寻找的以显示警报。但是,有没有人知道是否可以在运行时通过编程方式触发它,而不是使用info.plist?@Richard Venable,您是否知道是否有一种方法可以调用,以便在单击特定按钮时实际使用它? - user3832583prefs:root=
和 Prefs:root
的备忘录。prefs:root=
和 App-Prefs:root
URL 方案被苹果公司于 (2018-06-29)
拒绝了。
针对 Swift 4,
只有UIApplication.openSettingsURLString 是公开的 API 来打开设置。
UIApplication.openSettingsURLString
,并请求我的老板修改UI规范以解决这个问题。 - AechoLiu if (&UIApplicationOpenSettingsURLString != NULL)
iOS 8及以上版本中始终为TRUE。因此,您可以像这样进行编辑:
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
如果您想打开应用程序设置,您需要编写带有UIApplicationOpenSettingsURLString方法的代码。
fileprivate func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}
fileprivate func openSettings() {
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
- (void) openSettings
{
if(&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
请参考并详细描述,请访问在iOS 8中以编程方式打开设置应用程序
if (&UIApplicationOpenSettingsURLString != NULL) {
UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil)
message:NSLocalizedString(@"You must allow camera access in Settings", nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
otherButtonTitles:NSLocalizedString(@"Open Settings", nil), nil];
[alertView showWithDissmissBlock:^(NSInteger buttonIndex) {
if (alertView.cancelButtonIndex != buttonIndex) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}];
}
else {
UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil)
message:NSLocalizedString(@"You must allow camera access in Settings > Privacy > Camera", nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles:nil, nil];
[alertView showWithDissmissBlock:^(NSInteger buttonIndex) {
}];
}