我正在尝试在应用程序处于后台时控制屏幕的亮度,我不确定这是否可行。
this UIScreen brightness documentation注意到
应用程序所做的亮度更改将一直有效,直到设备被锁定,无论应用程序是否已关闭。系统亮度(用户可以在“设置”或“控制中心”中设置)在下次打开显示屏时恢复。
这似乎并不表示您无法在后台,应用程序主线程或其他情况下设置屏幕亮度。它只是说亮度在锁定/解锁周期重置。
考虑以下片段:
backgroundTask = UIApplication.shared().beginBackgroundTask(withName: "something", expirationHandler: handler) // handler ends the background task
registerCallbackForSomeEvent(callback: changeScreenBrightness)
事件无关紧要。我可以在应用程序暂停时打印()并且一切正常。
并且changeSCreenBrightness()
的实现类似于以下内容:
func changeScreenBrightness() {
let newBrightness = getNewBrightnessSomehow()
// main or global, it doesn't seem to be happening...
DispatchQueue.main.async(execute: {
// this works in the foreground?! but not the background..
UIScreen.main().brightness = newBrightness
// a print() will be executed however..
})
}
所以..谁能明确地说这是不可能的?或者有人有我可以学习的工作代码吗?
谢谢!
答案 0 :(得分:0)
我一直在尝试做类似的事情。我暂时得出结论,当应用程序不在前台时,此功能被禁用(尽管我仍在搜索文档以支持此功能)。
一旦设备被锁定,用户的原始亮度就会恢复。
我想在最小化或退出时将用户返回到原始UI亮度。我目前正在使用以下代码:
func _onApplicationLoad(){
NotificationCenter.default.addObserver(self, selector: #selector(_onApplicationMinimise), name: Notification.Name.UIApplicationWillResignActive, object: nil)
}
func _onApplicationMinimise(){ // This function IS called on minimise
// commands here run ok
UIScreen.main.brightness = CGFloat(1.0) // this doesn't run
// commands here run ok too
}
答案 1 :(得分:0)
请在此处检查我的答案:https://stackoverflow.com/a/57040935/2199288 您需要在AppDelegate中更改该亮度