我使用以下代码检查iphone的锁定状态。

int notify_token;

notify_register_dispatch("com.apple.springboard.lockstate", &notify_token,dispatch_get_main_queue(), ^(int token) {

    uint64_t state = UINT64_MAX;
    notify_get_state(token, &state);

    if (state == 0)
    {
        // Locked
    }
    else
    {
        // Unlocked
    }
});

问题在于,仅当设备被锁定或解锁时,我们才会收到通知。我想知道当前的锁定状态。即。我已经启动了该应用,在任何时候我都想知道设备是被锁定还是被解锁。使用上面的代码,只有当设备被用户锁定或解锁时,我们才会得到通知。

有其他选择吗?

最佳答案

参考

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
    CFStringRef nameCFString = (CFStringRef)name;
    NSString *lockState = (NSString*)nameCFString;
    NSLog(@"Darwin notification NAME = %@",name);

    if([lockState isEqualToString:@"com.apple.springboard.lockcomplete"])
    {
        NSLog(@"DEVICE LOCKED");
        //Logic to disable the GPS
    }
    else
    {
        NSLog(@"LOCK STATUS CHANGED");
        //Logic to enable the GPS
    }
}

-(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);
}

此外,无论设备是否锁定,您都可以设置全局布尔变量并设置其值。

关于ios - 检查设备是否被锁定或解锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35932501/

10-11 22:17
查看更多