Je dois ouvrir les paramètres par programme à partir de mon application. J'ai cherché dans SO mais partout, les gens disent que c'est impossible. Mais aujourd'hui, j'ai vu que cela est implémenté dans l'application Facebook. Il y a un bouton sur un UIAlertView
et lorsque vous cliquez dessus, vous ouvrez Il est donc possible d’ouvrir ces paramètres, j’en ai moi-même été témoin, mais comment faire? Quelqu'un sait-il comment Facebook le fait?
Vous ne pouvez pas, il n'y a pas d'appel API pour faire cela.
Seuls les dialogues système, les dialogues de Apple Frameworks, peuvent ouvrir l'application de configuration. Dans iOS 5, un schéma d'URL d'application permettait d'ouvrir la boîte de dialogue système, mais Apple avait été supprimé.) plus tard.
Avec l'arrivée d'iOS 8, vous pouvez ouvrir la boîte de dialogue des paramètres sur la page de vos applications.
if (&UIApplicationOpenSettingsURLString != NULL) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
else {
// Present some dialog telling the user to open the settings app.
}
Sur iOS 8, vous pouvez ouvrir les paramètres par programme!
Voici le code:
- (void)openSettings
{
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
Si votre application possède son propre ensemble de paramètres, les paramètres seront ouverts et indiqueront les paramètres de votre application. Si votre application ne dispose pas d'un ensemble de paramètres, la page des paramètres principaux s'affiche.
Sur iOS 8, vous pouvez ouvrir les paramètres par programme!
Voici la liste des URL actuellement connues dans l'application Paramètres:
- (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 = Luminosité
- 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 = Sons & chemin = Sonnerie
- prefs: root = Safari
- prefs: root = General & path = Assistant
- prefs: root = Sons
- 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 = Réseau/VPN
- prefs: root = Wallpaper
- prefs: root = WIFI
- prefs: root = INTERNET_TETHERING
La réponse de Vito Ziv dans Swift.
func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil)
}
L'alerte dans l'application Facebook à laquelle cette question fait référence est une alerte standard qu'iOS affiche lui-même lorsque vous définissez IRequiresPersistentWiFi sur YES dans vos fichiers Info.plist et l'utilisateur lance votre application sans connexion réseau.
Pour résumer la discussion ici:
Un mémo à propos de prefs:root=
et Prefs:root
.
Oui, notre application a été REJETÉE par Apple en raison de prefs:root=
et App-Prefs:root
Schéma d'URL aujourd'hui (2018-06-29)
. Ce sont des API privées.
Pour Swift 4,
Seul IApplication.openSettingsURLString est une API publique permettant d'ouvrir les paramètres.
if (&UIApplicationOpenSettingsURLString != NULL)
dans iOS 8+ est toujours VRAI. Donc vous pouvez éditer comme ça
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
(avec le nouveau openURL pour iOS 10)
Si vous souhaitez ouvrir les paramètres d'application, vous devez utiliser la méthode d'écriture avec UIApplicationOpenSettingsURLString.
fileprivate func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}
Si vous avez besoin d'ouvrir l'un des nombreux paramètres, vous devez utiliser cette fonction
fileprivate func openSettings() {
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
Pour ouvrir les paramètres de notre propre application dans iOS 8 and later
, utilisez le code suivant.
- (void) openSettings
{
if(&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
Pour référence et description détaillée, veuillez suivre
Ouverture de l'application Paramètres par programme dans 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) {
}];
}
Voici un exemple Swift 3 avec UIAlertController et UIAlertAction.
func showSettingsPopup() {
let alertVC = UIAlertController(title: "Notifications disabled", message: "Please, turn on notifications if you want to receive a reminder messages.", preferredStyle: .alert)
let close = UIAlertAction(title: "Close", style: .destructive, handler: { (action) in
print("close action handler")
})
let openSettings = UIAlertAction(title: "Open settings", style: .default, handler: { (action) in
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
print("Settings are opened: \(success)")
})
}
})
alertVC.addAction(openSettings)
alertVC.addAction(close)
present(alertVC, animated: true, completion: nil)
}
Dans la plupart des réponses données ici, je vois l'utilisation de "App-Prefs: root" "prefs: root", nous ne devrions pas les utiliser dans nos applications pour ouvrir les paramètres de l'application. Selon Apple, il s'agit d'un schéma d'URL non public. Si nous l'utilisons, notre application sera rejetée.
if #available(iOS 10.0, *) {
if let url = URL(string: "App-Prefs:root=Privacy") {
UIApplication.shared.open(url, completionHandler: .none)
}
} else {
// Fallback on earlier versions
}
Ouverture des paramètres de confidentialité dans l'application
À la place d'utiliser prefs:
, utilisez simplement App-Prefs:
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString: @"App-Prefs:root=WIFI"]]) {
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"App-Prefs:root=WIFI"]];
}
.
Tout est là: https://medium.com/@thanhvtrn/how-to-open-settings-wifi-in-Swift-on-ios-10-1d94cf2c2e6