Як відключити / включити сплячий режим програмно в 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 .


@Gati я сумніваюся, але не можу підтвердити, оскільки у мене немає годинника
jrturton

1
@jrturton Хм .. Це не працює в яблучному годиннику. Якщо у вас є рішення для цього, будь ласка, повідомте мене про це.
iGatiTech

Дякуємо за цю інформацію. Це стане в нагоді. Мені було цікаво, чи відключення режиму сну в одному додатку вплине на весь пристрій. Як, якщо я відключу його у своєму додатку, а потім виходжу з нього, чи все-таки він буде відключений після виходу програми? Чи потрібно перевірити, чи він активний чи ні, а потім повторно ввімкнути його на виході?
Скотт Кілбурн

2
@ScottKilbourn впливає лише на ваш додаток. [UIApplication sharedApplication]відноситься до вашого тільки UIApplication об'єкту додатки.
jrturton

22

У Swift 3 для відключення таймера очікування зараз:

UIApplication.shared.isIdleTimerDisabled = true

Щоб повернути таймер очікування просто:

UIApplication.shared.isIdleTimerDisabled = false

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


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
}

2
Це не покладається на AppDelegate. Насправді я вважав би поганою практикою тримати пристрій у спокої без будь-яких реальних причин. Питання полягало у підтримці пристрою в режимі пробудження під час певного функціоналу (до кінця відліку часу). Отже, слід вимкнути відключення таймера очікування, коли відлік починається, і його знову можна буде закінчити після закінчення відліку.
Мартін

@Cyrus Я не швидкий програміст. В даний час я роблю додаток для перегляду в Інтернеті, і я спробував безліч рішень без точних інструкцій, і це не працювало для мене, але це працює. тому я публікую це, щоб поділитися з іншими, хто шукатиме подібне рішення. Причина для цього - мій додаток - це гітарний помічник, якого потрібно постійно пробуджувати під час гри
godblessstrawberry
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.