2009-11-26 163 views
3

我希望我的应用能够继续运行并与用户交互,即使用户按下睡眠按钮。
到目前为止,我已经学会了,我的应用程序可以活下去用下面的代码:在睡眠模式下与iPhone交互

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在显示触摸
-an加速活动
-a MotionShake事件

但得到applicationWillResignActive - 活动后,没有任何一个上述工作。我的加速度计会停止传递加速事件。我无法再开始他们。 MotionShake事件将不会发送,并且我不知道,如果可以在睡觉时捕捉触摸事件。

更新
我希望用户使用我的应用程序可以说5小时。如果它闲置一段时间,它会自行睡觉。 我可能误解了我的意思是睡眠模式。 Iphone应该始终处于运行状态,但我不需要显示屏和背景灯始终处于运行状态(这是耗电最多的部件)。我知道,每10秒钟播放一次无声的声音,iPhone就不会入睡。而且我知道IPod应用程序能够在该模式下运行,并且用户可以通过晃动设备与其进行交互。那么应用程序没有任何官方的方式来做同样的事情吗?
---

有没有人有任何想法?

感谢Zensursula

回答

3

一旦applicationWillResignActive被调用您的应用程序,你只需停止接收事件:

的委托可以实现此方法 做出调整时,从活动 状态 应用程序转换到非活动状态。当 应用程序处于非活动状态时,它将执行 ,但不会调度传入的事件。当弹出 覆盖窗口或锁定设备时会发生这种情况。

睡眠模式的要点是节约能源。为此,该设备停止监听您要求的事件。

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

+0

感谢您对正在发生的事情的解释。我更新了我的问题,以更详细地解释我想要的内容。可能是我的问题另一个灵魂。 – Zensursula 2009-11-27 05:29:18