Come disabilitare / abilitare la modalità di sospensione a livello di codice in iOS?


162

Ho un'app che deve rimanere sveglia fino alla fine di un conto alla rovescia ma andrà in "modalità sospensione" ogni volta che raggiungerà il tempo assegnato per dormire.

Nella mia app, ho la possibilità di posticipare la sospensione, in modo che gli utenti possano disabilitarla / abilitarla.

Come lo faccio a livello di codice?

Risposte:


379

È possibile disabilitare il timer di inattività come segue;

In Objective-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

In Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

In Swift 3.0 e Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Riportalo su NOo falseper riattivare la modalità di sospensione.

Ad esempio, se ne hai bisogno fino a quando non lasci la vista, puoi ripristinarla sovrascrivendo la vista.

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

Maggiori informazioni sulla classe UIApplication .


@Gati Ne dubito, ma non posso confermare poiché non ho un orologio
jrturton,

1
@jrturton Hmm .. Non funziona in Apple Watch. Se hai una soluzione per questo, per favore fatemelo sapere.
iGatiTech,

Grazie per questa informazione Sarà utile. Mi chiedevo se la disabilitazione della modalità di sospensione in un'app influirà sull'intero dispositivo. Come se lo disabilito nella mia app e quindi esco dall'app, verrà comunque disabilitato dopo la chiusura dell'app? Devo verificare se è attivo o meno e quindi riattivarlo all'uscita?
Scott Kilbourn,

2
@ScottKilbourn influisce solo sulla tua app. [UIApplication sharedApplication]si riferisce solo all'oggetto UIApplication della tua app.
jrturton,

22

In Swift 3, per disabilitare il timer di inattività è ora:

UIApplication.shared.isIdleTimerDisabled = true

Per riattivare il timer di inattività è semplicemente:

UIApplication.shared.isIdleTimerDisabled = false

Inoltre, tieni presente che YESe NOnon sono disponibili in Swift e che devi utilizzare uno trueo false(al contrario della risposta precedente).


1

iOS 13, Swift 5.5.1+ per disabilitare il timer di inattività. In SceneDelegate.swift.

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }

-5

nella posizione esatta di Swift 3 è possibile eseguire questa operazione AppDelegate.swift: è necessario aggiungere una funzione UIApplication.shared.isIdleTimerDisabled = trueinterna in applicationmodo che il risultato sia simile al seguente:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}

2
Questo non dipende da AppDelegate. In effetti, considero una cattiva pratica mantenere il dispositivo sveglio senza alcun motivo reale. La domanda era di mantenere il dispositivo sveglio durante una specifica funzionalità (fino alla fine di un conto alla rovescia). Pertanto, è necessario considerare la disabilitazione del timer di inattività quando inizia il conto alla rovescia, abilitandolo nuovamente dopo la fine del conto alla rovescia.
Martin,

@Cyrus Non sono programmatore rapido. attualmente sto realizzando l'app webview e ho provato molte soluzioni senza istruzioni esatte e questo non ha funzionato per me, ma QUESTO FUNZIONA. quindi inserisco questo per condividerlo con altri che cercheranno una soluzione simile. il motivo per usare questo - la mia app è l'aiutante di chitarra che deve essere sempre sveglio durante il gioco
godblessstrawberry
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.