怎么知道iPhone是否被锁定了?

时间:2012-01-08 03:19:05

标签: ios

如果自上次输入密码超过60分钟,或者用户在锁定设备后进入应用程序,我的应用程序需要提示输入密码。

问题在于知道设备何时被锁定。如果用户只是在应用程序之间切换,则应用程序不需要提示输入密码,除非自上次密码提示以来已经过了60分钟。如果他们锁定设备,即使它不到60分钟也会再次提示。

applicationWillResignActive 等通知无效,因为我无法确定应用是否因设备被锁定或用户切换到其他应用而退出活动状态。

在搜索中,我发现帖子说我可以注册以观察 UIApplicationProtectedDataWillBecomeUnavailable 通知。

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(protectedDataWillBecomeUnavailable:)
           name:UIApplicationProtectedDataWillBecomeUnavailable object:nil];

当我收到此通知时,我设置了一个标志,以便在下次应用激活时提示输入用户密码。但我的测试表明,除非设备设置了密码,否则此通知会发送。

我已编写测试代码来观察所有通知,但我没有看到任何其他通知表明设备已被锁定。

还有其他方法可以知道设备何时被锁定?

2 个答案:

答案 0 :(得分:2)

这个问题引起了我的兴趣,所以我好奇地看了一下。虽然它没有显示有一个方便的通知发送,似乎有一个聪明的黑客使用加速度计。这是一个链接:

Lock Unlock events iphone

答案 1 :(得分:0)

还有更简单的方法 - 只需捕获UIApplicationDidBecomeActiveNotification通知并测量自上次捕获以来经过的时间。但是当用户点击应用程序时需要重置计时器。可以将所有点击事件捕捉到应用程序窗口。 最后一次点击和UIApplicationDidBecomeActiveNotification之间的时间将给你真正的超时。还需要检查当前和最近的UIApplicationDidBecomeActiveNotification之间的时间 - 它可能小于最后一次点击和UIApplicationDidBecomeActiveNotification。

在以下情况下触发UIApplicationDidBecomeActiveNotification:

  1. 应用启动
  2. 应用程序从后台恢复
  3. 应用程序正在解锁
  4. 电话结束
  5. 即。有些动作后应用程序出现在屏幕上的所有时间。