Как программно отключить / включить спящий режим в iOS?

162

У меня есть приложение, которое должно бодрствовать до конца обратного отсчета, но оно переходит в «спящий режим» всякий раз, когда достигает установленного времени для сна.

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

Как мне сделать это программно?

Арнли Бискайно
источник

Ответы:

379

Вы можете отключить таймер простоя следующим образом;

В Objective-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

В Свифте:

UIApplication.sharedApplication().idleTimerDisabled = true

В Swift 3.0 и Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Установите его обратно NOили falseснова включите спящий режим.

Например, если вам это нужно до тех пор, пока вы не покинете вид, вы можете установить его обратно, переопределив viewWillDisappear:

override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isIdleTimerDisabled = false
}

Подробнее о UIApplication Class .

jrturton
источник
@ Гати Я сомневаюсь, но не могу подтвердить, потому что у меня нет часов
jrturton
1
@jrturton Хмм .. Это не работает в Apple Watch. Если у вас есть какое-либо решение для этого, пожалуйста, дайте мне знать.
iGatiTech
Спасибо за эту информацию. Это пригодится. Мне было интересно, повлияет ли отключение режима сна в одном приложении на все устройство. Например, если я отключу его в своем приложении, а затем выйду из приложения, оно все равно будет отключено после выхода из приложения? Нужно ли проверять, активен он или нет, а затем снова включить его при выходе?
Скотт Килборн
2
@ScottKilbourn это влияет только на ваше приложение. [UIApplication sharedApplication]относится только к объекту UIApplication вашего приложения.
Джртуртон
22

В Swift 3 отключить таймер простоя теперь:

UIApplication.shared.isIdleTimerDisabled = true

Чтобы снова включить таймер простоя, просто:

UIApplication.shared.isIdleTimerDisabled = false

Кроме того, обратите внимание, что YESи NOне доступны в Swift, и что вы должны использовать либо trueили false(в отличие от предыдущего ответа).

Wyetro
источник
1

iOS 13, Swift 5,5.1+ для отключения таймера простоя. В SceneDelegate.swift.

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }
Сандип Маурья
источник
-5

в Swift 3 точное место, где это можно сделать, AppDelegate.swift- вы должны добавить UIApplication.shared.isIdleTimerDisabled = trueвнутрь applicationfunc, чтобы результат выглядел так:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}
godblessstrawberry
источник
2
Это не зависит от AppDelegate. На самом деле, я бы посчитал плохой практикой держать устройство без сна без какой-либо реальной причины. Речь шла о том, чтобы держать устройство в активном состоянии во время определенной функции (до конца обратного отсчета). Таким образом, отключение таймера простоя, когда обратный отсчет начинается и заканчивается, следует включить его снова после окончания обратного отсчета.
Мартин,
@ Cyrus Я не быстрый программист. В настоящее время я делаю приложение для веб-просмотра и перепробовал множество решений без точных инструкций, и это не сработало для меня, но ЭТО РАБОТАЕТ. поэтому я публикую это, чтобы поделиться с другими, кто будет искать подобное решение. причина использования этого - мое приложение - помощник гитары, который должен всегда просыпаться во время игры
godblessstrawberry