Определите, было ли изменение яркости на 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.

Я попытался найти свойство, которое позволяет мне узнать, было ли действие сгенерировано пользователем или это было автоматическое изменение, произведенное iOS. Это важно для моего приложения, поскольку обе ситуации следует рассматривать по-разному. В документации ничего по этому поводу не нашел. Любая помощь будет оценена.


person The dude    schedule 15.01.2014    source источник


Ответы (3)


Я думаю, что это невозможно, мы можем получить notification только при изменении яркости системой или вручную. мы не можем различить оба.

person Toseef Khilji    schedule 15.01.2014

Если пользователь изменит яркость, он сделает это из Центра управления или из приложения Настройки. Вы можете обнаружить и даже отличить эти два события на основе UIApplicationDelegate уведомлений (поскольку ваше приложение будет неактивным при открытии Центра управления и перейдет в фоновый режим когда пользователь открывает Настройки).

Если вы получаете UIScreenBrightnessDidChangeNotification, пока ваше приложение активно, вы можете быть уверены, что это было автоматическое изменение, инициированное системой.

Конечно, автоматическое изменение также может произойти, когда ваше приложение находится в состоянии Неактивно или Фоновый, но, возможно, эвристическое решение, основанное на этом, лучше, чем ничего.

person Simon Pickup    schedule 22.06.2016

Свифт 5.2

Уведомление теперь называется UIScreen.brightnessDidChangeNotification.

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

@objc func brightnessDidChange() {
    print(UIScreen.main.brightness)
}
person ixany    schedule 20.08.2019