Est-il loin de détecter l'événement lors de l'iOS appareil passe en mode veille (lorsque l'écran est noirci)?
Je voulais pour détecter les deux événements :
- Appareil est verrouillé/déverrouillé.
- Appareil se met en veille et l'écran se noircit.
Premier que j'ai été en mesure d'atteindre ici:
Est-il un moyen de vérifier si votre appareil iOS est verrouillé/déverrouillé?
Maintenant, je veux détecter le deuxième cas, est-il un moyen de le faire ?
Cette question est à propos api privées pour l'iPhone?
Rien suffit, je n'ai pas l'intention de soumettre mon application sur l'App Store.
Rien suffit, je n'ai pas l'intention de soumettre mon application sur l'App Store.
OriginalL'auteur Rohit Kashyap | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
En gros, vous avez déjà la solution, je devine que vous avez trouvé à partir de l'une de mes dernières réponses 🙂
Utiliser le
com.apple.springboard.hasBlankedScreen
événement.Il y a plusieurs événements qui se produisent lorsque l'écran s'efface, mais celui-ci devrait suffire:
où le rappel est:
Mise à jour: @VictorRonin a dit dans son commentaire ci-dessous, il devrait être facile de garder une trace de vous-même si l'écran est actuellement sur ou hors. Qui vous permet de déterminer si le
hasBlankedScreen
événement se produit lorsque l'écran est allumé ou éteint. Par exemple, lorsque votre application démarre, définir une variable pour indiquer que l'écran est allumé. Aussi, de tout temps, l'INTERFACE utilisateur de l'interaction se produit (bouton enfoncé, etc.), vous savez, l'écran doit être actuellement sur. Donc, la prochainehasBlankedScreen
que vous obtenez devrait indiquer que l'écran est hors.Aussi, je veux m'assurer que nous sommes clairs sur la terminologie. L'appareil serrures lorsque l'écran s'assombrit automatiquement en raison d'un dépassement de délai, ou lorsque l'utilisateur manuellement appuie sur le bouton d'alimentation. Cela se produit indépendamment de savoir si l'utilisateur a un Code configuré. À ce moment, vous pourrez voir le
com.apple.springboard.hasBlankedScreen
et lacom.apple.springboard.lockcomplete
événements.Lorsque l'écran se rallume, vous verrez
com.apple.springboard.hasBlankedScreen
une fois de plus. Mais, vous ne verrez pascom.apple.springboard.lockstate
jusqu'à ce que l'utilisateur a effectivement déverrouillé le périphérique avec un glissement de doigt (et peut-être un mot de passe).Mise à jour 2:
Il y a encore une autre façon de le faire. Vous pouvez utiliser un autre ensemble d'Api à l'écoute de cette notification, et aussi obtenir une variable d'état lors de la notification, il vient:
et vous aurez besoin de garder un ivar, ou certains autres persistante variable pour stocker la notification jeton (ne pas juste faire de cette une variable locale à la méthode que les registres!)
Vous devriez voir le
state
variable, obtenus parnotify_get_state()
, basculer entre 0 et 1, ce qui vous permettra de distinguer entre l'écran et hors événements.Bien que ce document est très vieux, il ne liste à laquelle la notification d'événements sont associés à un état qui peut être récupéré via
notify_get_state()
.Avertissement: voir cette question pour certains de complications avec cette dernière technique
Vous pouvez garder une variable d'état, si un périphérique est endormis ou éveillés.
Dois-je remarquer à juste titre que mon application ne recevrez pas de lockstate ou lockcomplete des notifications si il est déjà en arrière-plan lorsque l'action de verrouillage se produit?
pas nécessairement. Si vous appuyez simplement sur la Maison à l'arrière-plan de votre application, en supposant que votre app .plist ne précise pas qu'elle quitte à suspendre, ensuite, vous recevrez les notifications. Maintenant, comme avec n'importe quoi, il y a des limites sur combien de temps votre application en arrière-plan, de sorte que vous pourriez avoir à jouer avec des choses si vous voulez recevoir ces notifications indéfiniment. C'est vraiment une autre question, et dépend de savoir si nous parlons d'une application de jailbreak ou pas. Mais, fondamentalement, Darwin notifications ne s'arrête pas juste parce que vous n'avez pas saisi le fond.
prenez également soin de noter le dernier paramètre que je passe quand je m'inscris pour les notifications. Si vous n'utilisez pas
CFNotificationSuspensionBehaviorDeliverImmediately
, alors vous avez très probablement ne pas voir les notifications lorsque votre application est en arrière-plan.OriginalL'auteur Nate
Vous pouvez également vous abonner pour une notification: "com.apple.tremplin.lockstate" et l'utilisation de l'API SBGetScreenLockStatus pour déterminer le statut de savoir si l'appareil est verrouillé ou non.
Info: ce n'est pas pour un appareil jailbreaké.
Première notification est utilisé avec le même code, Nate, qui a écrit. SBGetScreenLockStatus est décrit dans l'article lié. Ces événements, j'ai ajouté une réponse à "l'Appareil est verrouillé/déverrouillé". Et il fonctionne sur la non jailbreaké appareil.
Merci de regarder cette question, car elle explique certains écueils potentiels de cette approche: stackoverflow.com/questions/14820249/...
OriginalL'auteur Victor Ronin