在睡眠模式下与iPhone交互

时间:2009-11-26 19:01:15

标签: iphone objective-c sleep

我希望我的应用程序能够继续运行并与用户交互,即使用户按下了睡眠按钮 到目前为止,我已经了解到,我的应用程序可以通过以下代码保持活力:

NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

这成功了。方法
- (void)timerFireMethod:(NSTimer*)theTimer
即使我处于睡眠模式,也会每0.5秒调用一次。

所以我知道我的问题是:如何在睡眠模式下与我的应用程序进行交互? 我只需要一个触发器就可以开始播放自定义音频文件。因此我需要一个触发事件,例如检测:
- 触摸显示屏
- 加速活动
-a MotionShake活动

但在获得applicationWillResignActive - 事件之后,以上任何内容都无效。我的加速度计停止加速事件的发送。我无法再次启动它们。 如果可以在睡觉时捕捉触摸事件,则不会传递MotionShake事件,我不知道。

更新
我希望用户可以使用我的应用程序,比如5小时。如果它闲置一段时间,它将自己进入睡眠状态。 我可能误解了我对睡眠模式的意思。 Iphone应该一直在运行,但我不需要显示器和背景灯一直打开(这些是耗电最多的部件)。我知道,每隔10秒播放一次无声的声音,iphone就不会睡觉了。我知道IPod应用程序能够以该模式运行,用户可以通过摇动设备与其进行交互。那么应用程序是否有任何官方方式来做同样的事情?
---

有人有什么想法吗?

谢谢Zensursula

1 个答案:

答案 0 :(得分:3)

在您的应用程序调用{​​{3}}后,您只需停止接收事件:

  

委托可以实现此方法   当做出调整时   应用程序从活动转换   状态为非活动状态。当一个   应用程序处于非活动状态   执行但不调度   传入的事件。这发生在   弹出覆盖窗口或何时弹出   设备已锁定。

睡眠模式是节省能源。为此,设备会停止侦听您要求的事件。

NSTimer事件仍将触发,因为它们不需要昂贵的(电池级)硬件监控。此外,使用NSTimer实现警报,因此即使在睡眠状态下它们也需要能够运行。否则,人们可能不会醒来并责怪他们的iPhone。

相关问题