Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Проверьте это, я хотел обнаружить события блокировки/разблокировки, я решил его с помощью уведомлений Дарвина. Вы можете обнаружить событие, когда устройство заблокировано с помощью "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

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

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

- (void)applicationDidEnterBackground:(UIApplication *)application

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

- (void)applicationDidBecomeActive:(UIApplication *)application

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

- (void)applicationWillResignActive:(UIApplication *)application

Ответ 4

Для обнаружения блокировки/разблокировки внутри приложения в 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")
}

Ответ 5

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