Atrasando, mas não desativando o iPhone Auto-Lock
-
06-07-2019 - |
Pergunta
Atualmente, tenho um aplicativo muito simples para o qual a única interação é agitar o iPhone. No entanto, eventualmente, a tela diminui e os bloqueios automáticos, já que o iPhone não está recebendo eventos de toque. Eu queria saber se existe uma maneira de redefinir o tempo limite de bloqueio automático quando abalado?
Eu sei disso para desativar completamente o bloqueio automático, eu faria isso:
[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ]
Mas eu realmente não quero desativá -lo completamente; Se o iPhone não estiver sendo usado legitimamente, ele deve ser um bloqueio automático conforme o esperado.
Obrigado pela ajuda.
Solução
Você poderia alternar o valor de [UIApplication sharedApplication].idleTimerDisabled
com base no valor do seu próprio gesto NSTIMER ou comportamento (agitando o telefone). Pode ser definido como YES
/NO
várias vezes em seu aplicativo.
Outras dicas
Aqui está o código que eu uso no meu aplicativo. Um pouco de plano de fundo: meu aplicativo possui um servidor da web embutido para que os usuários possam acessar dados de um navegador sobre o WiFi e cada vez que uma solicitação chega ao servidor, estendo o timer de bloqueio (por um mínimo de 2 minutos neste caso; Você ainda recebe o tempo padrão adicionado depois de reativado).
// 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];
}