【问题标题】:Unable to restore brightness on application exit应用程序退出时无法恢复亮度
【发布时间】:2012-03-19 11:36:28
【问题描述】:

我的应用(音乐家的节拍器应用)中有一个功能可以调暗屏幕以节省电池寿命。要设置亮度,我使用的是:

[UIScreen mainScreen].brightness = 0.1;

我在 viewDidLoad(...) 中保存应用程序启动时的原始亮度并将其保存到我的用户默认值。

在应用内更改视图时,我从用户默认值中检索原始亮度并通过调用恢复:

[UIScreen mainScreen].brightness = originalBrightness;

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

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

我在我的应用程序委托方法中添加了类似的代码:

applicationWillResignActive(...)
applicationDidEnterBackground(...)
applicationWillTerminate(...)

他们每个人都有一个方法调用来像以前一样在视图中设置屏幕亮度,类似的 NSLog(...)s 显示检索到的原始亮度...而且这一切都是正确的。我也进行了调试,并且正在调用设置亮度...但应用程序退出,设备屏幕仍处于较低的、变暗的水平。

最后,如果你点击顶部的“锁定”按钮,然后按Home键唤醒它......亮度是正确的。

我的怀疑是,当我在应用退出时设置亮度的调用触发的任何操作或事件都没有通过,可能是由于无效状态或类似情况。

另外,我的应用设置为不在后台运行,在 info.plist 中设置为:

Application does not run in background     YES

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 这些是私有 API 吗?我在 UIScreen 类中没有看到 mainWindow 或 mainWindows(错字?)属性。你是说主屏幕吗?
  • 是的,我错了。我是'[UIScreen mainScreen].brightness=val;'或 [[UIScreen mainScreen] setBrightness:val];'
  • 我很确定没有办法让这个设置在你的应用之外持久化。 Apple 的文档没有具体说明这一点,但我已经看到了另外两个改变亮度的应用程序就是这种情况。有人here 同意。
  • 运气好吗?我做了类似的事情,但遇到了同样的问题。哎呀,即使[UIScreen mainScreen].brightness = 1.0; 也不起作用。

标签: iphone brightness mainwindow uiscreen


【解决方案1】:

iOS 允许该应用在退出前有一点时间。设置亮度后,您可以在几分之一秒内尝试sleep

【讨论】:

  • @piccano 我在这里发帖后尝试过,但在委托中无济于事。我试过:[code]sleep()[/code] 以及 [code][Thread sleepForTimeInterval:][/code] 但没有变化。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    对此并不感到高兴。解决方法是在 ViewController viewWillDisappear 上重置亮度。不是一个很好的解决方案,但迄今为止我发现的唯一一个可以工作(这已经被打破了多年......)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      相关资源
      最近更新 更多