Открытие приложения Настройки из другого приложения
хорошо, я знаю, что есть много вопросов об этом, но все они из многих лет назад.
Так. Я знаю, что это возможно, потому что приложение Map делает это.
в приложении Map если я отключу локализацию для этого приложения, он отправит мне сообщение, и если я нажму OK, откроется приложение "Настройки". И мой вопрос в том, как это возможно? Как я могу открыть "приложение Настройки" из моего собственного приложения?
в принципе мне нужно сделать то же самое, если пользователь повернет от места для моего приложения, то я покажу ему сообщение, говорящее что-то, что откроет "Настройки Приложения"
Я очень ценю ваши ответы, я серьезно.
15 ответов:
как отметил Каран Дуе это теперь возможно в iOS8 используя
UIApplicationOpenSettingsURLString
посмотреть документация Apple.пример:
Swift 4.2 (BETA)
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
В Swift 3:
UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)
В Swift 2:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
В Объективе-C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
до iOS 8:
вы не можете. Как вы сказали, это было покрыто много раз, и что всплывающее окно с просьбой включить службы определения местоположения поставляется Apple, а не самим приложением. Именно поэтому он может открыть приложение настроек.
вот несколько связанных вопросов и статей:
можно ли открыть приложение Настройки с помощью openURL?
программное открытие приложения Настройки (iPhone)
как я могу открыть приложение Настройки, когда пользователь нажимает кнопку?
iPhone: открытие панели настроек приложения из приложения
откройте UIPickerView, нажав на запись в настройках приложения-как?
С @Yatheeshaless ' s ответ:
вы можете открыть приложение Настройки программно в iOS8, но не в более ранних версиях iOS.
Swift:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
Swift 4:
if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? { UIApplication.shared.openURL(url) }
Swift 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]];
да!! вы можете запустить экран настроек устройства, у меня есть протестировано на iOS 9.2
Шаг 1. нам нужно добавить схемы URL
перейти к настройкам проекта - > информация - > поле - > Добавить новый URL-схем
Шаг 2. запуск настроек программно благодаря @davidcann
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
также мы можем запускать подэкраны, такие как музыка, Местоположение и др. а также просто используя собственное имя
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];
смотрите этот полный список имен здесь поделился Анри Нормак
обновление:
в соответствии с комментарием Все хотят знать, что произойдет после этого изменения в моем статусе подачи заявки?
Так
YES!! I got successful update submission and application is available on store without any complain.
просто для подтверждения, Я только что загрузил это утро и отключил службы определения местоположения, а затем начал приложение, которое запросило у меня разрешение на местоположение, а затем мое всплывающее окно с предупреждением было там, чтобы отправить меня на страницу настроек - > службы определения местоположения - > включено -> вот и все!!
Вы можете использовать это на iOS 5.0 и более поздних:Это уже не работает.[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
обновление iOS 10
Apple изменила метод, чтобы открыть async в главном потоке. Однако теперь можно открыть настройки приложения только в собственных настройках.
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
обновление iOS 9
теперь можно перейти непосредственно в меню настроек. Однако необходимо создать схему URL-адресов. Это можно сделать двумя способами:
- XCode-вы найдете его в Target, Info, URL Scheme. Затем просто введите префы.
- прямое добавление в * - 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")!)
С
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];
в 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) }
в 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.
это работало со мной только тогда, когда настройки находятся в фоновом режиме. Он перенаправит вас на настройки уведомлений вашего приложения, но если настройки не были запущены в фоновом режиме, он просто перенаправит вас на настройки уведомлений в целом.
UIApplicationOpenSettingsURLString
это будет работать только если вы ранее разрешили для любого разрешения. Например, местоположение, фотография, контакт, доступ к Push-уведомлению. Так что если у вас нет таких разрешений от пользователя:Если iOS 10 или выше,
Он откроет настройки, но затем разбить его. Причина, ничего в настройках приложения.
ниже код откроет настройки приложения внутри настройки iOS.
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }
из-за недоступность устройства, я не мог проверить это на iOS
кроме того, я мог бы найти ниже код из некоторых gist и он отлично работает на iOS 10, а также. Но я не уверен, одобрит ли это команда Apple review или нет.
https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f
вы можете использовать ниже код для этого.
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
SWIFT 4.0
'openURL был устаревшим в iOS 10.0: пожалуйста, используйте openURL:options:completionHandler: instead
UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
Swift 4
Я предпочитаю открывать настройки более безопасным способом,
if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) { UIApplication.shared.open(settingUrl) } else { print("Setting URL invalid") }
Swift Вы можете использовать следующую функцию, чтобы открыть приложение Настройки с Bluetooth-страницы
func openSettingsApp(){ if let settings = NSURL(string: "prefs:root=Bluetooth") { UIApplication.sharedApplication().openURL(settings) } }
снова это не откроет Настройки Приложения. Это откроет приложение настроек с Bluetooth, поскольку это глубокая связь с bluetooth.
протестировано с 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; } }
Удачи В Кодировании :)
добавить это в свой класс
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") })