iOS:在应用程序处于后台时设置屏幕亮度

时间:2016-11-29 08:47:50

标签: ios swift

我正在尝试在应用程序处于后台时控制屏幕的亮度,我不确定这是否可行。

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..
    })
}

所以..谁能明确地说这是不可能的?或者有人有我可以学习的工作代码吗?

谢谢!

2 个答案:

答案 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
}
  • _onApplicationMinimise()函数被调用并起作用。
  • 亮度线运行前的
  • 命令。
  • 亮度线运行后的
  • 命令
  • UIScreen.main.brightness = 1.0不运行

答案 1 :(得分:0)

请在此处检查我的答案:https://stackoverflow.com/a/57040935/2199288 您需要在AppDelegate中更改该亮度