Задержка, но не отключение автоблокировки iPhone - PullRequest
5 голосов
/ 21 июня 2009

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

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

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ]

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

Спасибо за вашу помощь.

Ответы [ 2 ]

11 голосов
/ 21 июня 2009

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

6 голосов
/ 07 ноября 2009

Вот код, который я использую в своем приложении. Немного предыстории: мое приложение имеет встроенный веб-сервер, поэтому пользователи могут получать доступ к данным из браузера через 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];
}
...