应用程序退出后无法恢复亮度

12

我在我的应用程序(一个面向音乐家的节拍器应用)中有一个功能,可以调暗屏幕以节省电池寿命。为了设置亮度,我正在使用:

[UIScreen mainScreen].brightness = 0.1;

我在应用程序启动时在viewDidLoad(...)中保存原始亮度,并将其保存到UserDefaults中。

当在应用程序内更改视图时,我从UserDefaults中检索原始亮度并通过调用以下方法进行恢复:

[UIScreen mainScreen].brightness = originalBrightness;

这个很好用。我有NSLog(…)消息显示原始值等...所以机制是有效的。

我的问题是如何在应用程序退出时通过按Home按钮来恢复原始亮度。

我已经将类似的代码添加到我的应用程序委托方法中:

applicationWillResignActive(...)
applicationDidEnterBackground(...)
applicationWillTerminate(...)
他们每个都有一个方法来设置屏幕亮度,就像在视图中使用类似的NSLog(...)显示检索到的原始亮度一样...一切都正确。我也进行了调试,调用设置亮度的方法...但应用程序退出后,设备屏幕仍处于较低、暗淡的水平。
最后,如果你点击顶部的"锁定"按钮,然后按Home键唤醒它...亮度就正常了。
我怀疑,在应用程序退出时触发的任何动作或事件与我调用设置亮度的方法没有传递过去,可能是由于无效状态或类似的原因。
此外,我的应用程序被设置为不在后台运行,在info.plist中设置为:
Application does not run in background     YES

希望能得到任何帮助。

谢谢!


1
这些是私有API吗?在UIScreen类中我没有看到mainWindow或mainWindows(打错了?)属性。你是指mainScreen吗? - picciano
是的,这是我的笔误。正确的写法应该是 '[UIScreen mainScreen].brightness=val;' 或者 [[UIScreen mainScreen] setBrightness:val];'。 - TheTwoNotes
我非常确定除了你的应用程序之外,没有其他方法使此设置持久化。苹果的文档没有明确说明这一点,但我已经看到另外两个改变亮度的应用程序也是如此。这里有人表示同意。 - SSteve
有运气了吗?我在做类似的事情,但遇到了同样的问题。甚至[UIScreen mainScreen].brightness = 1.0;也不起作用。 - ari gold
3个回答

2

iOS允许应用程序在退出前有一点时间。在设置亮度后,您可以尝试sleep一小段时间。


@piccano 我在发帖后尝试了那个方法,但是在委托中没有用。我尝试了:[code]sleep()[/code] 以及 [code][Thread sleepForTimeInterval:][/code] 但是没有变化。 - TheTwoNotes

0

如果你仔细阅读https://devforums.apple.com/thread/139813,它会告诉你亮度更改不是永久的。当你按下锁定按钮并再次解锁时,原始用户亮度就会恢复。实际上,如果用户在我的应用程序运行时按下锁定按钮,我必须恢复我的应用程序亮度:

- (void)applicationDidBecomeActive:(UIApplication *)application{
    [self setBrightness];
}

0

这个问题一直困扰着我。解决方法是在 ViewController 的 viewWillDisappear 中重置亮度。虽然不是最好的解决方案,但这是我目前找到的唯一可行的方法(这个问题已经存在多年了...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接