Как я могу обнаружить события блокировки экрана/разблокировки на iPhone? Когда пользователь разблокирует его, я хочу показать уведомление о своем приложении для iPhone. (Так же, как широковещательный приемник для разблокировки экрана в Android.)
Как я могу обнаружить события блокировки экрана/разблокировки на iPhone?
Ответ 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];