Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect if a brightness change on iOS was a user action or automatic action

Tags:

ios

brightness

I've seen that I can detect changes in screen brightness by registering as an observer for UIScreenBrightnessDidChangeNotification

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

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

The object property of the notification is a UIScreen object.

I've tried to find a property that lets me know if the action was user generated or if it was an automatic change produced by iOS. This is important for my app since both situations should be treated differently. I did not find anything about this in the documentation. Any help will be appreciated.

like image 921
The dude Avatar asked Dec 12 '22 08:12

The dude


1 Answers

If the user changes the brightness, they'd do it from the Control Center or from the Settings app. You could detect and even differentiate between these two based on UIApplicationDelegate notifications (as your app will go Inactive for when Control Center is opened, and into Background when the user opens Settings).

If you receive UIScreenBrightnessDidChangeNotification whilst your app is Active, you can be sure it was an automatic change triggered by the system.

Of course an automatic change could also happen whilst your app is in Inactive or Background states too, but maybe a heuristic solution based on this is better than nothing.

like image 113
Simon Pickup Avatar answered Dec 13 '22 21:12

Simon Pickup