Как мне предотвратить затемнение или выключение экрана iPhone во время работы моего приложения?

114

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

Можно ли отключить энергосбережение из приложения?

Лайош
источник
7
Что с отрицательными по всем недавним вопросам? Мне это кажется правильным вопросом.
Эрик Шуновер,

Ответы:

172

Objective-C

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

стриж

UIApplication.shared.isIdleTimerDisabled = true
Лайош
источник
2
Имеет ли значение, где используется эта строка кода? Должен ли он быть в AppDelegate или в главном контроллере просмотра приложения?
16
Это зависит от того, как вы собираетесь его использовать. У вас может быть только одно представление, тайм-аут которого вы не хотите отключать в своем приложении. В этом случае вы должны использовать его в этом контроллере представления (когда представление появляется). Чтобы снова включить таймер, который вы затем используете, [[UIApplication sharedApplication] setIdleTimerDisabled:NO];когда представление исчезнет.
Лиам Джордж Бетсворт
2
Нужно ли приложению повторно включать таймер, когда приложение потеряло фокус, или это автоматически выполняется ОС?
Стэн Джеймс
5
Стэн - когда приложение выйдет из строя, ОС снова включит режим ожидания, звонить не нужно[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Крис Стрингер,
ИМХО без разницы, откуда вы это называете. Это всегда все приложение, и каждое представление остается на экране, а не затемнено.
декады
20

В быстром темпе вы можете использовать это как

UIApplication.sharedApplication().idleTimerDisabled = true
Vettiyanakan
источник
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Чарли Селигман
источник
То же самое и для Swift 4.
Брэнсон Кэмп,
2

Я поместил эту строку кода в свой контроллер представления, но мы все еще получаем от клиентов, что экран будет тускнеть или отключаться, пока кто-то не коснется экрана. Я видел другие сообщения, где вы не только программно устанавливаете

UIApplication.sharedApplication().idleTimerDisabled = true 

значение true, но сначала вы должны сбросить его на false

UIApplication.sharedApplication().idleTimerDisabled = false
UIApplication.sharedApplication().idleTimerDisabled = true

К сожалению, это все еще не сработало, и клиенты по-прежнему затемняют экраны. У нас есть профиль Apple Configurator, который не позволяет устройству переходить в спящий режим, и все же экран некоторых устройств гаснет, и клиенту нужно нажать кнопку «Домой», чтобы разбудить экран. Теперь я помещаю этот код в таймер, который срабатывает каждые 2,5 часа для сброса таймера простоя, надеюсь, это сработает.

JMStudios.jrichardson
источник
1
К сожалению, включение кода в функцию, которая запускается по таймеру, не решило проблему. Я оставил свой iPad включенным более чем на 24 часа, и он не потускнел и не работал. По словам одного из наших клиентов, пользователь использовал устройство за 15 минут до этого, а затем устройство погасло.
JMStudios.jrichardson
У меня такая же проблема: у меня есть контроллер представления, в котором я установил idelTimerDisabled = true (приложение должно оставаться открытым всю ночь, будильник), и большую часть времени оно работает, но иногда приложение не работает когда-нибудь ночью. У кого-нибудь есть идеи, что может переместить приложение в фоновый режим? или сбросить флаг?
Ярив Адам
Да, вы можете сбросить флаг, и я тоже это делал. У меня это тоже было в функции. Оказалось, что это был «процесс помешательства» на нашем сервере MDM, отправляющий эхо-запросы на наши устройства, чтобы затемнить экраны. очень надоедливый.
JMStudios.jrichardson
0

У нас была такая же проблема. Оказалось, что это мошеннический процесс на нашем сервере MDM, который был удален в нашей учетной записи, но на сервере все еще отправлялась команда для затемнения наших устройств.

JMStudios.jrichardson
источник