我想阻止用户的 Macbook 在应用程序运行时自动休眠。我该怎么做?我见过这个
https://developer.apple.com/library/content/qa/qa1340/_index.html
和这个:
和这个:
但是没有我可以放置的简单代码行或委托方法使这像在 iOS 中一样简单?我只想让整个应用程序正常工作并阻止计算机自动进入睡眠状态。如果有人手动将其放入睡眠状态,那么显然没问题。我不想阻止用户让计算机进入睡眠状态。但是只要我的应用程序正在运行,我就不希望计算机进入睡眠状态。就像您在看电影时一样,该应用程序不会进入睡眠状态。我怎么做?
我觉得这是我需要的代码,但是我是否只需在 viewdidload 中运行此函数就可以了?有那么简单吗?
var assertionID: IOPMAssertionID = 0
var success: IOReturn?
func disableScreenSleep(reason: String = "Unknown reason") -> Bool? {
guard success != nil else { return nil }
success = IOPMAssertionCreateWithName( kIOPMAssertionTypeNoDisplaySleep as CFString,
IOPMAssertionLevel(kIOPMAssertionLevelOn),
reason as CFString,
&assertionID )
return success == kIOReturnSuccess
}
Run Code Online (Sandbox Code Playgroud)
正如我在评论中已经提到的,你需要移除守卫,否则它只会返回 nil 并且永远不会禁用屏幕睡眠。您还可以简化您的方法,返回 void 并将您的 success 属性更改为 Bool 属性,例如 disabled 以监视屏幕睡眠状态:
var assertionID: IOPMAssertionID = 0
var sleepDisabled = false
func disableScreenSleep(reason: String = "Disabling Screen Sleep") {
if !sleepDisabled {
sleepDisabled = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep as CFString, IOPMAssertionLevel(kIOPMAssertionLevelOn), reason as CFString, &assertionID) == kIOReturnSuccess
}
}
func enableScreenSleep() {
if sleepDisabled {
IOPMAssertionRelease(assertionID)
sleepDisabled = false
}
}
Run Code Online (Sandbox Code Playgroud)
要禁用屏幕,只需调用第一个视图控制器的 viewDidLoad 中的方法:
override func viewDidLoad() {
super.viewDidLoad()
disableScreenSleep()
print("sleep Disabled:", sleepDisabled)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |