วิธีการปิดการใช้งาน / เปิดใช้งานโหมดสลีปโดยทางโปรแกรมใน iOS?


162

ฉันมีแอพที่ต้องตื่นตลอดเวลาจนกระทั่งสิ้นสุดการนับถอยหลัง แต่มันจะเข้าสู่ 'โหมดสลีป' ทุกครั้งที่ถึงเวลาจัดสรร

ในแอพของฉันฉันมีตัวเลือกในการเลื่อนการนอนหลับดังนั้นผู้ใช้สามารถปิด / เปิดใช้งานได้

ฉันจะเขียนโปรแกรมได้อย่างไร

คำตอบ:


379

คุณสามารถปิดการใช้งานตัวจับเวลาว่างดังนี้

ในวัตถุประสงค์ -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 ชั้น


@Gati ฉันสงสัย แต่ฉันไม่สามารถยืนยันได้เนื่องจากฉันไม่มีนาฬิกา
jrturton

1
@jrturton อืม .. มันไม่ทำงานในแอปเปิ้ลดู หากคุณมีทางออกสำหรับเรื่องนี้โปรดแจ้งให้เราทราบ
iGatiTech

ขอบคุณสำหรับข้อมูลนี้ มันจะมีประโยชน์ ฉันสงสัยว่าการปิดใช้งานโหมดสลีปในหนึ่งแอพจะส่งผลกระทบต่ออุปกรณ์ทั้งหมดหรือไม่ เช่นถ้าฉันปิดการใช้งานในแอพแล้วออกจากแอพมันจะยังคงถูกปิดใช้งานหลังจากที่แอพออกหรือไม่ ฉันต้องตรวจสอบว่ามันใช้งานอยู่หรือไม่และเปิดใช้งานใหม่อีกครั้งหรือไม่
Scott Kilbourn

2
@ScottKilbourn มีผลกับแอปของคุณเท่านั้น [UIApplication sharedApplication]อ้างอิงถึงออบเจ็กต์ UIA ของแอปพลิเคชันของคุณเท่านั้น
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 อันที่จริงฉันคิดว่ามันเป็นการปฏิบัติที่ไม่ดีที่จะทำให้อุปกรณ์ตื่นตัวโดยไม่มีเหตุผลจริง คำถามคือเกี่ยวกับการทำให้อุปกรณ์ตื่นในระหว่างการทำงานที่เฉพาะเจาะจง (จนกระทั่งสิ้นสุดการนับถอยหลัง) ดังนั้นการปิดการใช้งานตัวจับเวลาไม่ได้ใช้งานเมื่อการนับถอยหลังเริ่มต้นสิ้นสุดการเปิดใช้งานอีกครั้งหลังจากการนับถอยหลังสิ้นสุดลงควรได้รับการพิจารณา
Martin

@Cyrus ฉันไม่ได้โปรแกรมเมอร์อย่างรวดเร็ว ขณะนี้ฉันกำลังสร้างแอพพลิเคชั่น webview และฉันพยายามแก้ไขปัญหามากมายโดยไม่มีคำแนะนำที่แน่นอนและนั่นก็ไม่ได้ผลสำหรับฉัน แต่มันทำงานได้ดี ดังนั้นฉันจะโพสต์สิ่งนี้เพื่อแบ่งปันกับผู้อื่นที่กำลังค้นหาวิธีแก้ไขปัญหาที่คล้ายกัน เหตุผลในการใช้สิ่งนี้ - แอพของฉันคือผู้ช่วยกีต้าร์ที่ต้องตื่นอยู่เสมอในระหว่างการเล่น
godblessstrawberry
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.