检测iOS上的亮度变化是用户操作还是自动操作

我已经看到,通过注册为UIScreenBrightnessDidChangeNotification的观察者,我可以检测屏幕亮度的变化

 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(brightnessDidChange:) name:UIScreenBrightnessDidChangeNotification object:nil]; } -(void) brightnessDidChange:(NSNotification*)notification { NSLog(@"Brightness did change"); } 

通知的对象属性是一个UIScreen对象。

我试图find一个属性,让我知道如果行动是用户生成的,或者如果它是由iOS产生的自动更改。 这对我的应用程序很重要,因为这两种情况应该被区别对待。 在文档中我没有发现任何关于此的内容。 任何帮助将不胜感激。

我认为这是不可能的,我们只能通过系统或手动更改亮度。 我们无法区分两者。

如果用户改变亮度,他们会从控制中心或从设置应用程序。 您可以基于UIApplicationDelegate通知检测并区分这两个通知(因为您的应用在控制中心打开时将处于非活动状态,而在用户打开“设置”时则处于 后台 ”状态 )。

如果您在应用程序处于活动状态时收到UIScreenBrightnessDidChangeNotification ,则可以确定这是由系统触发的自动更改。

当然,当你的应用程序处于InactiveBackground状态时,也可能发生自动更改,但基于此的启发式解决scheme可能比没有好。