77 votes

Comment puis-je inviter l'utilisateur à activer les services de localisation une fois que l'utilisateur a refusé leur utilisation?

J'ai une application avec une interaction explicite de l'utilisateur qui rend l'utilisation de l'utilisateur de l'emplacement actuel. Si l'utilisateur refuse l'accès à des services de localisation, je voudrais encore des utilisations ultérieures pour inviter l'utilisateur à aller dans les paramètres et de ré-activer les services de localisation pour mon application.

Le comportement que je veux, c'est que de l'intégré dans les Cartes app:

  1. Réinitialiser les avertissements d'emplacement dans Réglages > Général > réinitialiser > Réinitialiser les Avertissements d'Emplacement.
  2. Démarrer l'application Cartes.
  3. Appuyez sur l'Emplacement Actuel de bouton dans le coin inférieur gauche.
  4. Les cartes d'invites avec des "Cartes "" souhaitez Utiliser Votre Emplacement Actuel" | "Ne pas Autoriser" | "Autoriser".
  5. Choisissez "Ne pas Autoriser" option.
  6. Appuyez sur l'Emplacement Actuel de bouton dans le coin inférieur gauche de nouveau.
  7. Cartes invites avec "Activer les Services de Localisation pour Permettre de "Cartes" pour Déterminer Votre Localisation" | "Paramètres" | "Annuler".

Dans ma propre application, de la même base des flux de résultats dans mon CLLocationManagerDelegate -locationManager:didFailWithError: appel d'une méthode avec un kCLErrorDenied d'erreur lors de l'étape finale et l'utilisateur n'a pas la possibilité d'ouvrir l'application Paramètres pour la corriger.

J'ai pu montrer ma propre alerte en réponse à l'erreur, mais il n'aurait pas la capacité de lancer l'application Paramètres, comme l'alerte que le système d'exploitation peut fournir que celui utilisé par les construit dans l'app plans.

Est-il quelque chose dans le CLLocationManager classe, je suis absent qui serait capable de me donner ce comportement?

42voto

Avec iOS8, vous pouvez enfin lier l’utilisateur à l’application Settings via openURL. Par exemple, vous pouvez créer un UIAlertView avec un seul bouton qui amène l’utilisateur à l’application Paramètres:

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:ICLocalizedString(@"LocationServicesPermissionTitle")
                                                    message:ICLocalizedString(@"LocationPermissionGeoFenceMessage")
                                                   delegate:self
                                          cancelButtonTitle:@"Settings"
                                          otherButtonTitles:nil];
    [alert show];
 

Dans votre délégué UIAlertView:

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString: UIApplicationOpenSettingsURLString]];
}
 

32voto

Kevin Ballard Points 88866

Il n'y a aucun moyen pour vous de faire cela. Votre seule option consiste à afficher une alerte informant l'utilisateur que votre application nécessite des services de localisation et leur demandant d'aller manuellement à l'application Paramètres et de l'activer.

7voto

Jai Points 1193

Selon Apple Docs sur le locationServicesEnabled méthode.

L'utilisateur peut activer ou désactiver les services de localisation dans les Paramètres de l'application en activant et désactivant les Services de Localisation de l'interrupteur en Général.

Vous devriez vérifier la valeur de retour de cette méthode avant de commencer l'emplacement des mises à jour pour déterminer si l'utilisateur a activé les services de localisation de l'appareil actuel. Si cette méthode ne retourne PAS et vous commencez à jour la localisation de toute façon, l'Emplacement de Noyau cadre invite l'utilisateur à confirmer que les services de localisation doit être réactivé.

Donc je ne peux pas vous juste de commencer à l'emplacement des services de mises à jour de toute façon à cause de l'alerte pour être invité?

2voto

Oliver Points 10593

Je suppose que vous aurez une réponse à votre question lorsque Apple réfléchira à un nouveau SDK. À l'heure actuelle et pour autant que je sache, ce n'est pas possible:

Aucun URL-Handler disponible
Aucune méthode utilisable pour appeler

Mais ... Comme le fait Maps, cela peut être fait, mais probablement à l'aide d'une API privée. Si vous n’avez pas peur de ce type de codage, vous devriez chercher là, à mon avis.

0voto

fossil12 Points 67

Je pense que vous avez besoin d'un URL-Handler (URL-Type) pour le fichier Settings.app. J'ai googlé, mais je ne peux pas en trouver un ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X