Question

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.

Was it helpful?

Solution 2

I think it is not possible, we can only get notification when Brightness change by the system or manually. we can't differentiate both.

OTHER TIPS

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.

Swift 5.2

The notification is now called UIScreen.brightnessDidChangeNotification.

let noteCenter = NotificationCenter.default
noteCenter.addObserver(self,
                       selector: #selector(brightnessDidChange),
                       name: UIScreen.brightnessDidChangeNotification,
                       object: nil)

@objc func brightnessDidChange() {
    print(UIScreen.main.brightness)
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top