Как предотвратить блокировку экрана в моем приложении с помощью Swift на iOS

113

Как отключить блокировку экрана только при использовании навигации?

У Waze есть возможность сделать это, как я могу сделать это в своем приложении?

альварогалия
источник

Ответы:

241

Использовать это:

Цель-C:

[[UIApplication sharedApplication] setIdleTimerDisabled: YES];

Swift (устаревший):

UIApplication.sharedApplication().idleTimerDisabled = true

Swift 3 и выше:

UIApplication.shared.isIdleTimerDisabled = true

Обязательно импортируйте UIKit.

Вот ссылка на документацию с сайта apple.developer.com.

Атвалш
источник
4
Swift должен бытьUIApplication.sharedApplication().idleTimerDisabled = true
Дуг
3
Swift 3:UIApplication.shared.idleTimerDisabled = true
funkenstrahlen 08
2
Он изменился наUIApplication.shared.isIdleTimerDisabled = true
Лукас Фарах
1
где добавить эту строчку? У меня нет AppDelegate.swift, так как я использую
react
@PradnyanandMilindPohare, вы можете добавить его куда хотите, просто убедитесь, что эта строка выполняется
Mellao
20

Для Swift 3.0 есть два варианта в зависимости от того, где вы хотите вызвать код:

Внутри AppDelegate.swift:

application.idleTimerDisabled = true

За пределами AppDelegate.swift:

UIApplication.shared().isIdleTimerDisabled = true

Crashalot
источник
2
Внешний код AppDelegate.swift должен быть таким:UIApplication.shared.isIdleTimerDisabled = false
DevStarlight
13

Swift 4

в файле AppDelegate.swift добавьте следующую строку внутри функции приложения :

    application.isIdleTimerDisabled = true
Кавехмб
источник
6

Вы можете использовать мою маленькую библиотеку Insomnia (Swift 3, iOS 9+) - еще одна приятная особенность заключается в том, что вы можете запретить спать только во время зарядки.

idleTimerDisabledSoultion в порядке , но вы должны помнить , чтобы установить его на falseпотом.

nsmeme
источник
0

Если у вас более сложный случай, вы можете использовать наш небольшой проект: ScreenSleepManager или, если речь идет только о конкретных ViewControllers, используйте Insomnia, как указывалось ранее. Ручное управление idleTimerDisabledпочти всегда вызывало у меня некоторые проблемы (например, я забыл повторно установить значение false или обрабатывать несколько (вложенных) модулей, пытающихся установить его).

Dev_IL
источник