IOS5 setBrightness 在 applicationWillResignActive 下不能正常工作。

10
我在我的应用中使用[[UIScreen mainScreen]setBrightness: ](在sdk 5.0中)来改变系统的背光。以下步骤适用于我的应用:
  1. 启动应用程序,获取系统亮度作为默认值,然后保存为sysBright

  2. 使用我的应用程序更改亮度,更改后的亮度,然后保存为appBright

  3. 使用主页按钮或锁定按钮重新激活应用程序,将亮度设置为sysBright(步骤1的值,系统默认亮度)。

  4. 再次激活应用程序。 然后它将从1到3重复上述步骤。

第3步有些问题,当我使用锁定按钮停用应用程序时,函数applicationWillResignActive可以恢复亮度值(sysBright)。但是当我按下主页按钮时,它不再起作用。亮度仍然是我在应用程序中更改的值(appBright)。
有人对此有任何想法吗?感谢任何帮助~
以下是代码:
float appBright,sysBright;

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    sysBright = [[UIScreen mainScreen] brightness];
    [[NSUserDefaults standardUserDefaults] setFloat:sysBright forKey:@"sysBright"];

    [[UIScreen mainScreen] setBrightness:appBright];
}

//doesn't work when i ResignActive with the home button
- (void)applicationWillResignActive:(UIApplication *)application
{        
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright];        
}

“退出按钮”是什么意思?任务切换器中的红色减号还是主页按钮? - conradev
抱歉,这是主页按钮,我已经更改了帖子内容。 - phnessu4
嗨,你找到任何解决方法了吗?我也卡在这里了... - cpprulez
你不能这样做,我之前尝试过。请查看我很久以前的问题,里面有一些建议 - https://dev59.com/aGsy5IYBdhLWcg3wyxCi#NUIDoYgBc1ULPQZF1CBt - Adam Waite
CGFloat sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"]; [[UIScreen mainScreen] setBrightness:sysBright]; 这是你代码中的一个更正。但我认为这不会起作用,因为苹果不允许这样做。 - Shrikant Phadke
4个回答

5

iOS并不会保留应用内的亮度值。当应用程序变成非活动状态、退出、崩溃等情况后,它应该恢复系统值。因此,在applicationWillResignActive中没有必要这样做。

但是这并不起作用,这是一个错误。实际上,如果您切换到另一个应用程序(按两次主屏幕按钮并选择另一个应用程序),它会起作用。

不要浪费时间,向苹果提交错误报告(我已经这样做了)。

解锁屏幕将恢复默认系统亮度。只需按两次电源按钮并解锁即可恢复原始亮度。


1

试试这个...

- (void)applicationWillResignActive:(UIApplication *)application
{        
    CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:brightness];        
}

如果您以这种方式获取亮度,那么您不会使用私有API吗?为什么不使用 CGFloat initialScreenBrightness = [UIScreen mainScreen].brightness; 呢? - Fernando Cervantes

0

0

有时候,您确实需要暂停应用程序(使其进入后台,例如当您按下Home按钮时),并仍然保留之前设置的屏幕亮度。

例如:我目前正在开发一个水下应用程序(它使用iPhone在防水壳中拍照以进行科学研究),我们无法访问整个设备屏幕。

水下外壳在非常特定的位置实现了3个机械“触摸”按钮,我们必须禁用自动锁定功能,因为没有办法执行滑动手势来解锁设备。

当不使用应用程序时,我们仍然需要一种保存电池寿命的方法,即暂停应用程序并将屏幕亮度设置为低水平。

我们实施的解决方案是:

a)我们告诉用户在设置中关闭自动亮度和禁用自动锁定功能

b)我们在ApplicationDelegate类中将亮度调整为100%:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Adjust Brightness to full
    [[UIScreen mainScreen] setBrightness:1.0];
}

c) 我们在应用程序按钮上触发以下代码,以确保应用程序进入后台(不消耗 CPU 周期)并且屏幕亮度降到最低水平(节省电池电量):

[[UIScreen mainScreen] setBrightness:0.0]; // Set to low brightness
[[UIApplication sharedApplication] performSelector:@selector(suspend)]; // Simulate Home button

我希望这对某些人有所帮助。

附注:苹果人机界面指南是一回事,实际应用的需求又是另一回事(你无法预测或事先限制任何东西)。


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