Retarder mais ne pas désactiver le verrouillage automatique de l'iPhone
-
06-07-2019 - |
Question
Je dispose actuellement d'une application très simple pour laquelle la seule interaction est de secouer l'iPhone. Cependant, l'écran s'assombrit et se verrouille automatiquement puisque l'iPhone ne reçoit aucun événement tactile. Je me demandais s’il existait un moyen de réinitialiser le délai de verrouillage automatique une fois secoué?
Je sais que pour désactiver complètement le verrouillage automatique, je procéderais ainsi:
[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ]
mais je ne veux pas vraiment le désactiver complètement; si l'iPhone n'est légitimement pas utilisé, il devrait se verrouiller automatiquement comme prévu
Merci de votre aide.
La solution
Vous pouvez modifier la valeur de [UIApplication sharedApplication] .idleTimerDisabled
en fonction de la valeur de votre propre geste NSTimer ou comportemental (secouer le téléphone). Il peut être défini sur OUI
/ NON
à plusieurs reprises dans votre application.
Autres conseils
Voici le code que j'utilise dans mon application. Un peu d’arrière-plan: mon application dispose d’un serveur Web intégré qui permet aux utilisateurs d’accéder aux données d’un navigateur via WIFI et chaque fois qu’une demande arrive sur le serveur, j’étends le verrouillage du minuteur (pour un minimum de 2 minutes dans ce cas; la durée par défaut est toujours ajoutée une fois réactivée).
// disable idle timer for a fixed amount of time.
- (void) extendIdleTimerTimeout
{
// cancel previous scheduled messages to turn idle timer back on
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(reenableIdleTimer)
object:nil];
// disable idle timer
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
// re-enable the timer on after specified delay.
[self performSelector:@selector(reenableIdleTimer) withObject:nil afterDelay: 60 * 2];
}
- (void) reenableIdleTimer
{
sharedApplication].idleTimerDisabled );
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(reenableIdleTimer)
object:nil];
// disable idle timer
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
}