İOS'ta uyku modunu programlı olarak nasıl devre dışı bırakabilir / etkinleştirebilirim?


162

Ben bir geri sayım sonuna kadar uyanık kalmak gerekir bir uygulama var ama uyku için ayrılan zaman ulaştığında 'uyku moduna' gidecek.

Uygulamamda, uykuyu erteleme seçeneğim var, böylece kullanıcılar devre dışı bırakabilir / etkinleştirebilir.

Programlı olarak nasıl yaparım?

Yanıtlar:


379

Boşta kalma zamanlayıcısını aşağıdaki şekilde devre dışı bırakabilirsiniz;

Hedef-C'de:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Swift'te:

UIApplication.sharedApplication().idleTimerDisabled = true

Swift 3.0 ve Swift 4.0'da:

UIApplication.shared.isIdleTimerDisabled = true

Uyku modunu yeniden etkinleştirmek için NOveya falseolarak ayarlayın.

Örneğin, görünümden ayrılana kadar ihtiyacınız varsa, viewWillDisappear'ı geçersiz kılarak geri ayarlayabilirsiniz:

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

UIApplication Sınıfı hakkında daha fazla bilgi .


@Gati Şüpheliyim, ancak bir saatim olmadığından onaylayamıyorum
jrturton

1
@jrturton Hmm .. Elma saatinde çalışmıyor. Bunun için herhangi bir çözümünüz varsa lütfen bana bildirin.
iGatiTech

Bu bilgi için teşekkürler. İşe yarayacak. Bir uygulamada uyku modunu devre dışı bırakmanın tüm cihazı etkileyip etkilemeyeceğini merak ediyordum. Uygulamamda devre dışı bırakıp uygulamadan çıkarsam, uygulama çıktıktan sonra hala devre dışı bırakılır mı? Etkin olup olmadığını kontrol etmem ve ardından çıkışta yeniden etkinleştirmem gerekir mi?
Scott Kilbourn

2
@ScottKilbourn sadece uygulamanızı etkiler. [UIApplication sharedApplication]ifade eder sizin sadece uygulamanın UIApplication nesne.
jrturton

22

Swift 3'te, rölanti zamanlayıcısını devre dışı bırakmak için şimdi:

UIApplication.shared.isIdleTimerDisabled = true

Boşta kalma zamanlayıcısını tekrar açmak için:

UIApplication.shared.isIdleTimerDisabled = false

Ayrıca, not olduğunu YESve NOSwift bulunmayan ve ya kullanması gerektiğini trueveya false(önceki cevaba aksine).


1

Boşta kalma zamanlayıcısını devre dışı bırakmak için iOS 13, Swift 5,5.1+ . In SceneDelegate.swift.

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

-5

Swift 3 bunun yapılabileceği tam bir yerde AppDelegate.swift- func'un UIApplication.shared.isIdleTimerDisabled = trueiçine eklemelisiniz, applicationböylece sonuç şöyle görünecektir:

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

2
Bu, AppDelegate'e bağlı değildir. Aslında, cihazı gerçek bir sebep olmadan uyanık tutmanın kötü bir uygulama olduğunu düşünürdüm. Soru, cihazı belirli bir işlevsellik sırasında (geri sayımın sonuna kadar) uyanık tutmaktı. Bu nedenle, geri sayım başladığında boşta kalma zamanlayıcısının devre dışı bırakılması, geri sayım bittikten sonra tekrar etkinleştirilmesi düşünülmelidir.
Martin

@Cyrus Hızlı programcı değilim. şu anda webview uygulaması yapıyorum ve kesin talimatlar olmadan çok sayıda çözüm denedim ve bu benim için çalışmadı, ama BU ÇALIŞIYOR. bu yüzden benzer bir çözüm arayacak başkalarıyla paylaşmak için bunu gönderirim. Bunu kullanmanın nedeni - Uygulamam çalma sırasında her zaman
uyanması
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.