当系统改变屏幕亮度时,iOS 是不是会发送通知?

Posted

技术标签:

【中文标题】当系统改变屏幕亮度时,iOS 是不是会发送通知?【英文标题】:Does iOS send notifications when the system changes the screen brightness?当系统改变屏幕亮度时,iOS 是否会发送通知? 【发布时间】:2013-01-21 01:59:27 【问题描述】:

问题是,我的阅读应用程序有一个按钮,可将其置于深色主题模式。亮度降低 10%。当用户返回正常模式时,它被设置回记忆的亮度。但与此同时,实际系统亮度可能会因自动亮度调整或用户进入“设置”并在那里进行更改而发生变化。

brightness 属性的问题是您只查询实际屏幕亮度,而您设置的任何内容都只是暂时的,直到用户锁定屏幕。解锁后系统恢复为系统亮度。

如果 ios 在系统更改亮度时发送通知会很有帮助。在文档中找不到关于此的任何内容。

【问题讨论】:

【参考方案1】:

搜索UIScreenBrightnessDidChangeNotification,它是UIScreen 类的一部分。它适用于 iOS 5.0 及更高版本。

【讨论】:

【参考方案2】:

如果您想在设备再次解锁时将亮度设置回编程值,请注意UIApplicationDidBecomeActiveNotification 通知并在选择器中将亮度设置回您想要的级别。

我对整个亮度问题进行了更多研究,这就是我的发现:

UIScreenBrightnessDidChangeNotification 仅在系统更改亮度或用户从控制面板或设置更改亮度时调用。不是当您以编程方式更改亮度时。

我从这个 Apple Doc here(见下文)假设是,在您以编程方式设置亮度后,亮度将不再改变。

应用所做的亮度更改在设备启动之前一直有效 锁定,无论应用程序是否关闭。系统亮度 (用户可以在“设置”或“控制中心”中设置)恢复 下次打开显示器时。

但是我发现这不是真的(或者我误解了它)。以编程方式设置亮度后,亮度确实会发生变化(并且UIScreenBrightnessDidChangeNotification 确实会被调用)。然而,它只有在系统认为它应该增加或减少亮度时才会被调用(由于环境亮度的变化)*。如果环境的亮度保持不变,您的屏幕将保持与您以编程方式设置的一样亮。

这是什么意思?嗯,有两件事:

如果您想将亮度保持在您以编程方式设置的级别,无论环境如何变化,您都必须观察UIScreenBrightnessDidChangeNotification,并在每次调用时将亮度重置为您想要的级别。 如果你想回到“系统”亮度,那你真的做不到,因为如果环境发生变化,你根本无法判断系统亮度会是多少(因为你每次都在重置它) .为此,您有 2 个选项。
    在以编程方式设置亮度并将其设置回该值之前,请记住亮度。或者 将亮度设置为 0.5,让系统开始工作。

这两种情况下的“危险”是它会一直保持在您设置的值上,直到检测到环境亮度变化。

*有两种特殊情况...当您将亮度设置为 0.0 并且系统认为它应该降低亮度时,没有任何反应,因为它已经处于 0.0。其次,当您将其设置为 1.0 时,无论环境如何变化,它都将保持在 1.0。

【讨论】:

感谢这里的详细程度!根据您的回答,我们构建了一个小型测试应用程序,可以确认我们得到了相同的结果(在 iPad Air 2 和 12.9 英寸 iPad Pro 上测试,均在 iOS 9.3.2 上),但有一个小例外:如果亮度设置为最大值 1.0,在随后更改环境光级别期间没有发生任何变化(即使放置在暗室中,屏幕仍保持在 1.0 并且不会像预期的那样按比例缩小)。只有在关闭并重新打开自动亮度设置或手动调整亮度后,自动亮度才会重新启用。 坦克贝卡。我相应地更新了我的答案(更改了关于“特殊”情况的最后一段。

以上是关于当系统改变屏幕亮度时,iOS 是不是会发送通知?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 本地通知不会在锁定屏幕上播放声音

iOS - 未确定推送通知

苹果推送通知令牌是不是会随着 iOS 更新而改变?

IOS锁屏通知

当用户在系统设置 -> 显示和亮度上启用“粗体文本”时,iOS 应用程序在启动画面处冻结

安卓手机手动调亮度调到最亮 一松手又暗了点 是哪里有问题了?不是自动亮度模式