检测 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 生成的自动更改。这对我的应用程序很重要,因为这两种情况应该区别对待。我在文档中没有找到任何有关此的内容。任何帮助将不胜感激。

如果用户更改亮度,他们会从"控制中心"或"设置"应用进行更改。您可以根据UIApplicationDelegate通知检测甚至区分这两者(因为您的应用将在打开"控制中心"时变为非活动状态,并在用户打开"设置"时进入"后台")。

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

当然,当您的应用处于非活动后台状态时,也可能发生自动更改,但也许基于此的启发式解决方案总比没有好。

我认为这

是不可能的,只有当系统或手动更改亮度时,我们才能获得notification。 我们无法区分两者。

Swift 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)
}

最新更新