2009-06-21 2 views
5

У меня в настоящее время очень простое приложение, для которого единственное взаимодействие встряхивает iPhone. Однако в конечном итоге экран тускнеет и автоматически блокируется, так как iPhone не получает никаких событий касания. Мне было интересно, есть ли способ сбросить тайм-аут автоматической блокировки при встряхивании?Откладывание, но не отключение iPhone автоблокировки

Я знаю, что, чтобы отключить автоматическую блокировку полностью, я хотел бы сделать это:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

, но я не хочу, чтобы отключить его полностью; если iPhone законно не используется, он должен автоматически блокироваться, как ожидалось.

Благодарим за помощь.

+2

Я думал, что детское потрясение было запрещено. –

ответ

11

Вы можете переключить значение [UIApplication sharedApplication].idleTimerDisabled на основе значения собственного NSTimer или поведенческого жеста (встряхивания телефона). Он может быть установлен в YES/NO несколько раз в вашем приложении.

+0

Хорошо, я отдам это. Я думал, что может быть просто метод resetIdleTimer или что-то более чистое. –

6

Вот код, который я использую в своем приложении. Немного фона: мое приложение имеет встроенный веб-сервер, поэтому пользователи могут получать доступ к данным из браузера через WIFI, и каждый раз, когда запрос поступает на сервер, я продлеваю таймер блокировки (в течение как минимум 2 минут в этом случае; вы по-прежнему получаете установленное по умолчанию количество добавленного времени после повторного включения).

// 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]; 
} 
+0

Этот код очень полезен, мы бросили его прямо в наше приложение, спасибо! Просто FYI, мое тестирование с iPad 2 под управлением iOS 5.0.1, похоже, предполагает, что фиксированное количество времени фактически становится минимальным временем простоя - т.е. если настроенная блокировка блокировки пользователя меньше, экран блокируется также сразу после вызова setDileTimerDisabled: NO. Если время блокировки пользователей больше фиксированного времени, вышеуказанный код не влияет. – JosephH

+0

Мой код pre-iOS4, поэтому хорошо, что вы предоставили свои наблюдения в новых версиях iOS. – wkw

Смежные вопросы