Как я могу обнаружить события блокировки / разблокировки экрана на iPhone? - PullRequest
15 голосов
/ 25 октября 2011

Как я могу обнаружить события блокировки / разблокировки экрана на iPhone? Когда пользователь разблокирует его, я хочу показать уведомление уведомления от моего приложения iPhone. (Так же, как Broadcast Receiver для разблокировки экрана в Android.)

Ответы [ 5 ]

24 голосов
/ 11 января 2013

Проверьте это, я хотел обнаружить события блокировки / разблокировки, я решил это с помощью уведомлений Дарвина.Вы можете обнаружить событие, когда устройство заблокировано "com.apple.springboard.lockcomplete".

//call back
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
    // the "com.apple.springboard.lockcomplete" notification will always come after the "com.apple.springboard.lockstate" notification

    NSString *lockState = (NSString*)name;
    NSLog(@"Darwin notification NAME = %@",name);

    if([lockState isEqualToString:@"com.apple.springboard.lockcomplete"])
    {
        NSLog(@"DEVICE LOCKED");
    }
    else
    {
        NSLog(@"LOCK STATUS CHANGED");
    }   
}


-(void)registerforDeviceLockNotif
{
    //Screen lock notifications
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                    NULL, // observer
                                    displayStatusChanged, // callback
                                    CFSTR("com.apple.springboard.lockcomplete"), // event name
                                    NULL, // object
                                    CFNotificationSuspensionBehaviorDeliverImmediately);

    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                    NULL, // observer
                                    displayStatusChanged, // callback
                                    CFSTR("com.apple.springboard.lockstate"), // event name
                                    NULL, // object
                                    CFNotificationSuspensionBehaviorDeliverImmediately);  
}   
3 голосов
/ 27 октября 2011

На самом деле я хочу, если я выйду из приложения и заблокирую iPhone, и через некоторое время я должен разблокировать iPhone, а затем выйти из приложений показывать уведомления или оповещать о запуске приложений.

Вы не можете сделать это на iPhone.

1 голос
/ 16 апреля 2019

Чтобы обнаружить блокировку / разблокировку внутри приложения в swift 5, у меня сработало только это:

override func viewDidLoad() {
    super.viewDidLoad()

     NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.willEnterForegroundNotification, object: nil)
     NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}

@objc func applicationDidBecomeActive(notification: NSNotification) {
    print("ACTIVE")
}
@objc func applicationDidEnterBackground(notification: NSNotification) {
    print("BACKGROUND")
}
1 голос
/ 25 октября 2011

Может быть, вам нужно реализовать следующие методы в AppDelegate:

Сообщает делегату, что приложение теперь находится в фоновом режиме.

- (void)applicationDidEnterBackground:(UIApplication *)application

Сообщает делегату, что приложение стало активным.

- (void)applicationDidBecomeActive:(UIApplication *)application

Сообщает делегату, что приложение собирается стать неактивным.

- (void)applicationWillResignActive:(UIApplication *)application
0 голосов
/ 29 февраля 2016

В текущем контроллере представления вы должны добавить наблюдателя для UIApplicationDidEnterBackgroundNotification и удалить наблюдателя во время закрытия контроллера представления. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

...