Bagaimana cara menonaktifkan / mengaktifkan mode tidur secara terprogram di iOS?

162

Saya memiliki aplikasi yang harus tetap terjaga sampai akhir hitung mundur tetapi akan masuk ke 'mode tidur' setiap kali mencapai waktu yang dialokasikan untuk tidur.

Di aplikasi saya, saya memiliki opsi untuk menunda tidur, sehingga pengguna dapat menonaktifkan / mengaktifkannya.

Bagaimana saya melakukannya secara terprogram?

Arnlee Vizcayno
sumber

Jawaban:

379

Anda dapat menonaktifkan timer idle sebagai berikut;

Dalam Objective-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Dalam Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

Di Swift 3.0 & Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Kembalikan ke NOatau falseuntuk mengaktifkan kembali mode tidur.

Misalnya, jika Anda membutuhkannya sampai Anda meninggalkan tampilan, Anda dapat mengaturnya kembali dengan menimpa viewWillDisappear:

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

Lebih lanjut tentang Kelas Aplikasi UIA .

jrturton
sumber
@ Gati Saya ragu, tapi saya tidak bisa memastikan karena saya tidak punya arloji
jrturton
1
@ jrturton Hmm .. Ini tidak berfungsi di jam tangan apel. Jika Anda punya solusi untuk ini, tolong beri tahu saya.
iGatiTech
Terima kasih atas informasi ini. Ini akan berguna. Saya bertanya-tanya apakah menonaktifkan mode tidur dalam satu aplikasi akan memengaruhi seluruh perangkat. Seperti jika saya menonaktifkannya di aplikasi saya dan kemudian keluar dari aplikasi, apakah masih akan dinonaktifkan setelah aplikasi keluar? Apakah saya perlu memeriksa apakah ini aktif atau tidak, dan kemudian mengaktifkannya kembali saat keluar?
Scott Kilbourn
2
@ScottKilbourn itu hanya memengaruhi aplikasi Anda. [UIApplication sharedApplication]mengacu pada Anda objek UIApplication aplikasi saja.
jrturton
22

Di Swift 3, untuk menonaktifkan timer idle sekarang:

UIApplication.shared.isIdleTimerDisabled = true

Untuk mengaktifkan kembali pengatur waktu siaga, cukup dengan:

UIApplication.shared.isIdleTimerDisabled = false

Selain itu, perhatikan bahwa YESdan NOtidak tersedia di Swift dan Anda harus menggunakan salah satu trueatau false(yang bertentangan dengan jawaban sebelumnya).

Wyetro
sumber
1

iOS 13, Swift 5,5.1+ untuk menonaktifkan timer idle. Dalam SceneDelegate.swift.

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

di Swift 3 lokasi yang tepat di mana ini bisa dilakukan adalah AppDelegate.swift- Anda harus menambahkan func UIApplication.shared.isIdleTimerDisabled = truedi dalam applicationsehingga hasilnya akan terlihat seperti ini:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}
godblessstrawberry
sumber
2
Ini tidak bergantung pada AppDelegate. Sebenarnya saya akan menganggap itu praktik yang buruk untuk menjaga perangkat tetap terjaga tanpa alasan yang jelas. Pertanyaannya adalah tentang menjaga perangkat tetap aktif selama fungsionalitas tertentu (hingga akhir hitungan mundur). Jadi menonaktifkan timer idle ketika hitungan mundur dimulai dan mengaktifkannya lagi setelah hitungan mundur berakhir harus dipertimbangkan.
Martin
@ Cherry saya bukan programmer cepat. Saat ini saya sedang membuat aplikasi webview dan saya mencoba banyak solusi tanpa instruksi yang tepat dan itu tidak berhasil untuk saya, tetapi INI BEKERJA. jadi saya memposting ini untuk dibagikan kepada orang lain yang akan mencari solusi serupa. alasan untuk menggunakan ini - aplikasi saya adalah penolong gitar yang harus selalu bangun selama bermain
godblessstrawberry