Làm cách nào để tắt / bật chế độ ngủ theo chương trình trong iOS?


162

Tôi có một ứng dụng phải tỉnh táo cho đến khi kết thúc đếm ngược nhưng nó sẽ chuyển sang 'chế độ ngủ' bất cứ khi nào nó đạt đến thời gian được phân bổ để ngủ.

Trong ứng dụng của mình, tôi có tùy chọn hoãn ngủ, vì vậy người dùng có thể tắt / bật nó.

Làm thế nào để tôi làm điều đó theo chương trình?

Câu trả lời:


379

Bạn có thể vô hiệu hóa bộ đếm thời gian nhàn rỗi như sau;

Trong Mục tiêu-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Trong Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

Trong Swift 3.0 & Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Đặt nó trở lại NOhoặc falseđể kích hoạt lại chế độ ngủ.

Ví dụ: nếu bạn cần nó cho đến khi bạn rời khỏi chế độ xem, bạn có thể đặt lại nó bằng cách ghi đè viewWillDisappear:

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

Tìm hiểu thêm về lớp học UIApplication .


@Gati Tôi nghi ngờ điều đó, nhưng tôi không thể xác nhận vì tôi không có đồng hồ
jrturton

1
@jrturton Hmm .. Nó không hoạt động trong đồng hồ quả táo. Nếu bạn có bất kỳ giải pháp cho điều này thì xin vui lòng cho tôi biết.
iGatiTech

Cảm ơn thông tin này. Nó sẽ có ích. Tôi đã tự hỏi nếu vô hiệu hóa chế độ ngủ trong một ứng dụng sẽ ảnh hưởng đến toàn bộ thiết bị. Giống như nếu tôi vô hiệu hóa nó trong ứng dụng của mình và sau đó thoát khỏi ứng dụng, liệu nó có còn bị vô hiệu hóa sau khi ứng dụng thoát không? Tôi có cần kiểm tra xem nó có hoạt động hay không, và sau đó bật lại trên đường ra?
Scott Kilbourn

2
@ScottKilbourn nó chỉ ảnh hưởng đến ứng dụng của bạn. [UIApplication sharedApplication]chỉ đề cập đến đối tượng UIApplication của ứng dụng của bạn .
jrturton

22

Trong Swift 3, để tắt bộ đếm thời gian nhàn rỗi, bây giờ:

UIApplication.shared.isIdleTimerDisabled = true

Để bật lại bộ đếm thời gian nhàn rỗi, chỉ cần:

UIApplication.shared.isIdleTimerDisabled = false

Ngoài ra, lưu ý rằng YESNOkhông có sẵn trong Swift và rằng bạn phải sử dụng một trong hai truehoặc false(như trái ngược với các câu trả lời trước).


1

iOS 13, Swift 5,5.1+ để tắt bộ hẹn giờ không hoạt động. Trong SceneDelegate.swift.

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

-5

trong Swift 3 vị trí chính xác nơi điều này có thể được thực hiện AppDelegate.swift- bạn nên thêm UIApplication.shared.isIdleTimerDisabled = truevào bên trong applicationfunc để kết quả sẽ như thế này:

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

2
Điều này không phụ thuộc vào AppDelegate. Trong thực tế, tôi sẽ coi đó là thực tế xấu để giữ cho thiết bị tỉnh táo mà không có bất kỳ lý do thực sự. Câu hỏi là về việc giữ cho thiết bị luôn hoạt động trong một chức năng cụ thể (cho đến khi kết thúc đếm ngược). Vì vậy, vô hiệu hóa bộ đếm thời gian nhàn rỗi khi quá trình đếm ngược bắt đầu kích hoạt lại sau khi kết thúc đếm ngược nên được xem xét.
Martin

@Cyrus Tôi không phải là lập trình viên nhanh nhẹn. Hiện tại tôi đang tạo ứng dụng webview và tôi đã thử rất nhiều giải pháp mà không có hướng dẫn chính xác và điều đó không hiệu quả với tôi, nhưng CÔNG TRÌNH NÀY. Vì vậy, tôi đăng bài này để chia sẻ với những người khác sẽ tìm kiếm giải pháp tương tự. lý do cho việc sử dụng này - ứng dụng của tôi là người trợ giúp guitar cần luôn luôn tỉnh táo trong khi chơi
godblessstrawberry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.