2014-01-15 25 views
3

我已经看到,我可以通过注册作为观察员UIScreenBrightnessDidChangeNotification检测是否在iOS的亮度变化是

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(brightnessDidChange:) name:UIScreenBrightnessDidChangeNotification object:nil]; 
} 

-(void) brightnessDidChange:(NSNotification*)notification 
{ 
    NSLog(@"Brightness did change"); 
} 

通知的对象属性是检测屏幕的亮度变化的用户动作或自动动作一个UIScreen对象。

我试图找到一个属性,它让我知道,如果动作是用户生成的,或者如果它是由iOS的产生自动变化。这对我的应用程序很重要,因为这两种情况应该以不同的方式处理在文档中我没有发现任何关于此的信息。任何帮助将不胜感激。

回答

6

我认为这是不可能的,我们只能得到notification时由系统或手动亮度变化。我们无法区分两者。

0

如果用户更改亮度,他们会从控制中心设置应用中完成。你可以发现这两个基础上UIApplicationDelegate通知之间甚至区分(如您的应用程序,当用户打开设置会去当控制中心被打开无效,并为背景)。

如果您收到UIScreenBrightnessDidChangeNotification,而您的应用程序为活动,您可以确定它是由系统触发的自动更改。

当然自动改变也可能发生,而你的应用程序是在无效背景状态也是如此,但也许在此基础上启发式的解决方案是聊胜于无。