Как отключить автоматическую блокировку iPhone/iPad, когда приложение находится в режиме переднего плана?

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

Я знаю, что в какой-то момент мне придется использовать [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; и [[UIApplication sharedApplication] setIdleTimerDisabled:NO];, но где их лучше всего разместить?


person jMelnik    schedule 23.02.2012    source источник


Ответы (5)


Включите таймер простоя в

- (void)applicationWillResignActive:(UIApplication *)application

и отключить его в

- (void)applicationDidBecomeActive:(UIApplication *)application
person Erik Aigner    schedule 23.02.2012
comment
Здесь он работал нормально, но мне интересно, он будет работать на док-станциях и Apple TV? Нет здесь никого для тестирования. - person jMelnik; 23.02.2012
comment
Я слышал, что есть еще один вариант — включить тихий звук. - person Hot Licks; 23.02.2012
comment
@HotLicks, которые, вероятно, приведут к тому, что ваше приложение будет отклонено, но никто не может сказать этого наверняка. - person Dan Rosenstark; 15.08.2012
comment
На самом деле это довольно хороший хак. Спасибо большое :) - person yershuachu; 15.10.2014
comment
Это неправильное место, потому что, когда появляется какое-либо предупреждение или центр уведомлений или центр управления, приложение перестает быть активным, и вы рискуете автоматической блокировкой устройства. - person malhal; 03.08.2015

Лучше всего отключить его в didFinishLaunchingWithOptions. Система автоматически позаботится о том, чтобы настройка не действовала, когда приложение находится в фоновом режиме.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    application.idleTimerDisabled = YES; 
    return YES;
}

Я разместил эту альтернативу, потому что принятый ответ не предотвращает автоматическую блокировку при появлении предупреждения (электронная почта, сообщение, событие календаря и т. д.) или при работе центра уведомлений или центра управления.

person malhal    schedule 03.08.2015
comment
а если приложение в фоне? отключается ли автоблокировка в этой ситуации? - person Damon Yuan; 10.12.2015
comment
автоблокировка не отключена в фоновом режиме, Apple не разрешает это. - person malhal; 09.07.2016

Свифт 3.0:

Внутри AppDelegate.swift: application.idleTimerDisabled = true

Вне AppDelegate.swift: UIApplication.shared().isIdleTimerDisabled = true

person Crashalot    schedule 24.04.2017

А в Swift 3.0:

UIApplication.shared().isIdleTimerDisabled = true
person Lukl    schedule 10.08.2016

мои 2 цента: для xcode 9:

 application.idleTimerDisabled = true

.....AppDelegate.swift:28:15: 'idleTimerDisabled' был переименован в 'isIdleTimerDisabled'

so:

application.isIdleTimerDisabled = true
person ingconti    schedule 28.10.2017