IOS5 setBrightness didn't work with applicationWillResignActive

自闭症网瘾萝莉.ら 提交于 2019-12-18 20:03:17

问题


I use [[UIScreen mainScreen]setBrightness: ] (in sdk 5.0) to change the system background light in my app.

The following steps work with my app

  1. Active the app, get the system brightness as default, then save as sysBright.

  2. Change the brightness with my app, changed brightness, then save as appBright.

  3. ResignActive app with home button or lock button, set brightness to sysBright (step 1 value, system default brightness).

  4. Active app again. Then it will repeat the above steps form 1 to 3.

Something is wrong with step 3, when I inactivate the app with the lock button, the function applicationWillResignActive works well, it can restore the brightness value (sysBright).

But when I press the home button, it doesn't work anymore. The brightness is still the value I changed in my app. (appBright)

Does anyone have any idea about it? Thanks for any help ~

Here is the code:

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];        
}

回答1:


iOS is not meant to retain in-app brightness values. It should restore system value after the app resigns active, quits, crashes etc. So officially there is no need to do that in applicationWillResignActive.

But it does't work. It's a bug. In fact it works if you switch to another app (press home button twice and select another app)

Don't waste your time just file a bug report to Apple (I did well).

Unlock screen restores default system brightness. Just press the power button twice and unlock to restore original brightness.




回答2:


Try this...

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



回答3:


There are cases when you really need to suspend the application (make it go to background, like when you push the Home button) and still preserve the brightness you have previously set on the screen.

Example: I 'm currently working on an underwater application (it takes photos with an iPhone in an waterproof case for scientific reasons) and we don't have access to the whole device screen.

The underwater housing implements 3 mechanical "touch" buttons on very specific places and we have to disable the auto-lock feature because there is no way to perform a slide-gesture to unlock the device.

We still need a way to preserve battery life when not using the application i.e. suspend the application and setting a low level on screen brightness.

The solution we implemented is:

a) We tell the user to turn the Auto-Brightness off in settings and disable the auto-lock feature

b) We turn the Brightness to 100% on ApplicationDelegate class:

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

c) We execute the following code with the touch on an application button, to ensure that the application goes to background (not consuming CPU cycles) and the brightness go to lower level possible (preserve battery):

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

I hope this could be helpful to somebody.

PS: The Apple Human interface guides is one thing and the actual needs of a real-world application is another (you cannot predict or restrict anything in advance).




回答4:


According to Apple´s DevForum it seems to be a bug that Apple is unwilling to fix.



来源:https://stackoverflow.com/questions/8280734/ios5-setbrightness-didnt-work-with-applicationwillresignactive

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!